我是XSLT转换的新手。
它是我之前question的扩展。现在我正在复制这样的所有节点,然后根据前一个question的答案对它们进行转换。
<!-- Copy everything -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
但输入有两个父元素。
<Parent1>
<Parent11>
<Element1>
<!--Rest of the xml I want to work with-->
</Element1>
<Parent11>
<Parent21>
<Other></Other>
</Parent21>
<Parent1>
我尝试使用
<xsl:template match="Element1">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
然后它以纯文本形式返回xml值。使用<Parent21>
个孩子的值
基于我试过的答案
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="Parent1/Parent11/Element1"/>
</xsl:copy>
</xsl:template>
这没有给我任何回报。
答案 0 :(得分:0)
如果您只想处理Element1,请保留通常的身份模板
<!-- Copy everything -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
并为/
添加另一个模板:
<xsl:template match="/">
<xsl:apply-templates select="Parent1/Parent11/Element1"/>
</xsl:template>
这将直接“跳过”Element1并从那里继续正常处理,忽略文档的其余部分。然后,您可以使用与Element1内的节点匹配的其他模板来执行您需要的任何其他处理。
如果文档中有多个Element1,那么你需要在它们周围包裹一个根元素,以使输出良好,例如。
<xsl:template match="/">
<root>
<xsl:apply-templates select="Parent1/Parent11/Element1"/>
</root>
</xsl:template>