使用 xslt 复制没有内容的元素
Copy element without content using xslt
我正在拼命寻找一个简单的解决方案来解决我的问题,并希望有人能够提供帮助:)。
问题:
给定一个 xml 文档,其中包含具有属性的元素。我需要选择一些元素值,将它们放在元素之前,然后使用 xslt 删除元素内容。棘手的部分来了。我只需要对 not 嵌入某个其他元素(例如 <a>
.
的元素执行此操作
示例:
<document>
<text>Some text <element attribute="123">"abc"</element> more text.</text>
<text>Lots of text...</text>
<a><element attribute="123">"abc"</element></a>
</document>
转换为:
<document>
<text>Some text "abc" (<element attribute="123"></element>) more text.</text>
<text>Lots of text...</text>
<a><element attribute="123">"abc"</element></a>
</document>
目前我的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element[not(ancestor::a)]">
<xsl:value-of select= "." />
<xsl:text> (</xsl:text>
<xsl:copy-of select= "." />
<xsl:text>)</xsl:text>
</xsl:template>
</xsl:stylesheet>
将生成以下内容:
<document>
<text>Some text "abc" (<element attribute="123">"abc"</element>) more text.</text>
<text>Lots of text...</text>
<a><element attribute="123">"abc"</element></a>
</document>
这非常接近,但不是想要的结果。现在我需要从第一个元素中删除 "abc" 甚至复制没有其内容的元素,但我无法做到并且不知何故坚持我的解决方案。有哪位大侠能赐教一下吗?
而不是 <xsl:copy-of select= "." />
你想要
<xsl:copy>
<xsl:copy-of select="@*"/>
</xsl:copy>
执行浅拷贝并复制属性。
我正在拼命寻找一个简单的解决方案来解决我的问题,并希望有人能够提供帮助:)。
问题:
给定一个 xml 文档,其中包含具有属性的元素。我需要选择一些元素值,将它们放在元素之前,然后使用 xslt 删除元素内容。棘手的部分来了。我只需要对 not 嵌入某个其他元素(例如 <a>
.
示例:
<document>
<text>Some text <element attribute="123">"abc"</element> more text.</text>
<text>Lots of text...</text>
<a><element attribute="123">"abc"</element></a>
</document>
转换为:
<document>
<text>Some text "abc" (<element attribute="123"></element>) more text.</text>
<text>Lots of text...</text>
<a><element attribute="123">"abc"</element></a>
</document>
目前我的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element[not(ancestor::a)]">
<xsl:value-of select= "." />
<xsl:text> (</xsl:text>
<xsl:copy-of select= "." />
<xsl:text>)</xsl:text>
</xsl:template>
</xsl:stylesheet>
将生成以下内容:
<document>
<text>Some text "abc" (<element attribute="123">"abc"</element>) more text.</text>
<text>Lots of text...</text>
<a><element attribute="123">"abc"</element></a>
</document>
这非常接近,但不是想要的结果。现在我需要从第一个元素中删除 "abc" 甚至复制没有其内容的元素,但我无法做到并且不知何故坚持我的解决方案。有哪位大侠能赐教一下吗?
而不是 <xsl:copy-of select= "." />
你想要
<xsl:copy>
<xsl:copy-of select="@*"/>
</xsl:copy>
执行浅拷贝并复制属性。