XSLT:将相同的标签合并为一个并进行编辑
XSLT: Combine same tags into one and edit it
我在 <p>
标签中有 <r>
个标签。每个 <r>
-Tag 都可以有属性,并且有一个 <t>
-Tag。
我需要将这些 t-tags 合并为一个,但在这样做之前进行编辑。
示例输入:
<document>
<body>
<p>
<r>
<rPr>
<rStyle val="TabelleSpaltentitelZchn"/>
</rPr>
<t>Erster Teil</t>
</r>
<r>
<t space="preserve"> Zweiter Teil</t>
</r>
</p>
</body>
</document>
期望的结果:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<body>
<p>
<r>
<t><span class="TabelleSpaltentitelZchn">Erster Teil</span> Zweiter Teil</t>
</r>
</p>
</body>
</document>
所以在每个包含 rStyle-Information 的 <r>
-Tag 处,我需要将 <t>
-Value 包装成一个跨度。
到目前为止我的 xslt:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="t"/>
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/r[1]">
<r>
<t><xsl:value-of separator="" select="../r/t"/></t>
</r>
</xsl:template>
<xsl:template match="p/r[position() gt 1]"/>
</xsl:stylesheet>
只需组合这些 <t>
-标签就可以正常工作。但我不知道如何编辑它们。
为 t
元素编写模板:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/r[1]">
<r>
<t>
<xsl:apply-templates select="../r/t"/>
</t>
</r>
</xsl:template>
<xsl:template match="p/r[rPr/rStyle/@val]/t">
<span class="{../rPr/rStyle/@val}">
<xsl:apply-templates/>
</span>
</xsl:template>
<xsl:template match="p/r[not(rPr/rStyle/@val)]/t">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="p/r[position() gt 1]"/>
我在 <p>
标签中有 <r>
个标签。每个 <r>
-Tag 都可以有属性,并且有一个 <t>
-Tag。
我需要将这些 t-tags 合并为一个,但在这样做之前进行编辑。
示例输入:
<document>
<body>
<p>
<r>
<rPr>
<rStyle val="TabelleSpaltentitelZchn"/>
</rPr>
<t>Erster Teil</t>
</r>
<r>
<t space="preserve"> Zweiter Teil</t>
</r>
</p>
</body>
</document>
期望的结果:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<body>
<p>
<r>
<t><span class="TabelleSpaltentitelZchn">Erster Teil</span> Zweiter Teil</t>
</r>
</p>
</body>
</document>
所以在每个包含 rStyle-Information 的 <r>
-Tag 处,我需要将 <t>
-Value 包装成一个跨度。
到目前为止我的 xslt:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="t"/>
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/r[1]">
<r>
<t><xsl:value-of separator="" select="../r/t"/></t>
</r>
</xsl:template>
<xsl:template match="p/r[position() gt 1]"/>
</xsl:stylesheet>
只需组合这些 <t>
-标签就可以正常工作。但我不知道如何编辑它们。
为 t
元素编写模板:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/r[1]">
<r>
<t>
<xsl:apply-templates select="../r/t"/>
</t>
</r>
</xsl:template>
<xsl:template match="p/r[rPr/rStyle/@val]/t">
<span class="{../rPr/rStyle/@val}">
<xsl:apply-templates/>
</span>
</xsl:template>
<xsl:template match="p/r[not(rPr/rStyle/@val)]/t">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="p/r[position() gt 1]"/>