如何编写一个XSLT模板,该模板采用所有非“元”和“答案”元素并将它们存入“my_question”模板?因此,例如,给出以下XML ...
<question>
<meta>
...
</meta>
<para />
<para>Why?</para>
<answer weight="1" correctness="0">
...
</answer>
<answer weight="1" correctness="0">
...
</answer>
<answer weight="1" correctness="100">
...
</answer>
<answer weight="1" correctness="0">
...
</answer>
</question>
我希望结果是
<my_question>
<para />
<para>Why?</para>
</my_question>
答案 0 :(得分:1)
您从身份模板开始:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
运行它,你会看到,一切都将被改变。
然后,您有选择地删除节点,例如像这样:
<xsl:template match="answer" />
请阅读此链接以获取更多信息:http://www.xmlplease.com/xsltidentity 它非常详细。祝你好运!
答案 1 :(得分:1)
身份模板是您的朋友
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<my_question>
<xsl:apply-templates select="question"/>
</my_question>
</xsl:template>
<!-- ignores the specified elements. Adjust for nesting if necessary. -->
<xsl:template match="meta | answer"/>
<!-- Pass everything else -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>