-1

如何编写一个 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>
4

2 回答 2

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 它非常详细。祝你好运!

于 2012-06-08T20:46:29.673 回答
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>
于 2012-06-08T20:46:39.573 回答