好的人,还有另一个XSLT问题。这个转换包括我在2个不同的XSLT中单独工作的2个动作,但我不能为我的生活结合起来。
我正在尝试创建一个选择节点集的身份转换,并且还会删除所有属性。以下是我正在使用的内容:
数据:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<meta>
<data>
<uselessMeta>SomeValue</uselessMeta>
</data>
</meta>
<dataWrapper>
<data xmlns:xfa="http://www.w3.org/1999/xhtml">
<neededData1 meanAttribute="NotWanted">TransformMe!</neededData1>
<neededData2 meanAttribute="NotWanted">TransformMe!</neededData2>
</data>
</dataWrapper>
</doc>
XSLT 1(身份转换):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" >
<xsl:output omit-xml-declaration="no" method="xml" indent="no"/>
<xsl:template match="/">
<xsl:copy>
<xsl:copy-of select="//dataWrapper/data[text() != '']" />
</xsl:copy>
</xsl:template>
</xsl:transform>
XSLT 2:XSLT - remove all attributes
通缉结果:
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:xfa="http://www.w3.org/1999/xhtml">
<neededData1>TransformMe!</neededData1>
<neededData2>TransformMe!</neededData2>
</data>
问题似乎是我尝试匹配根(/
)或所有节点(node()
),但我不能使用<xsl:copy-of />
和{{1一起来。注意事项:
非常感谢任何帮助!
答案 0 :(得分:1)
而不是在第一个XSLT中使用xsl:copy-of
,而xsl:apply-templates
可以选择第二个XSLT中的模板(一次与第一个XSLT结合使用)。 xsl:copy-of
只复制现有节点,而不进行任何更改或应用任何其他模板。
试试这个XSLT:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output omit-xml-declaration="no" method="xml" indent="no"/>
<xsl:template match="/">
<xsl:copy>
<a>
<xsl:apply-templates select="//dataWrapper/data[text() != '']" />
</a>
</xsl:copy>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*"/>
</xsl:transform>
请注意,我已从身份模板中移除了@*
上的匹配项,因此它只匹配node()
。某些处理器可能会将两个模板匹配具有相同优先级的相同事物,但它们也可能会选择最后一个匹配模板。 (见http://www.w3.org/TR/xslt#conflict)