需要XML帮助

需要XML帮助,xml,xslt,Xml,Xslt,全部 我有一个以下格式的XML <a> <a1 id="1"/> <a1 id="2"/> <a1 id="3"/> <a1 id="4"/> <a1 id="5"/> </a> 现在,我想使用XSLT根据前两个节点的位置删除它们,并再次生成XML。因此,上面的输出应为以下XML: <a> <a1 id="3"/> <a1 id="4"/> <

全部

我有一个以下格式的XML

 <a>
<a1 id="1"/>
<a1 id="2"/>
<a1 id="3"/>
<a1 id="4"/>
<a1 id="5"/>
</a>
现在,我想使用XSLT根据前两个节点的位置删除它们,并再次生成XML。因此,上面的输出应为以下XML:

<a>

    <a1 id="3"/>
    <a1 id="4"/>
    <a1 id="5"/>
    </a>
我使用的代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />
  <xsl:template match="a1">
  &lt;a1&gt;
    <xsl:copy>
      <xsl:value-of select="@id"/>

    </xsl:copy>
&lt;/a1&gt;
  </xsl:template>
  <xsl:template match="a1[position()&lt;2]"></xsl:template>
</xsl:stylesheet>
但我得到的结果是

<a1> 2 </a1>
  <a1> 3 </a1>
  <a1> 4 </a1>
  <a1> 5 </a1>

听起来您需要使用fn:position来处理

的子元素。您可以使用一种称为标识模板的方法来非常轻松地完成此操作。这将是我示例中的第一个模板。只需要处理每个属性和节点。之后,您所要做的就是不使用空白模板处理任何位置小于3的a1节点

所以使用这个XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="a1[position()&lt;3]" />

</xsl:stylesheet>
在这个XML上

<a>
  <a1 id="1"/>
  <a1 id="2"/>
  <a1 id="3"/>
  <a1 id="4"/>
  <a1 id="5"/>
</a>
生成此输出

<a>


  <a1 id="3"/>
  <a1 id="4"/>
  <a1 id="5"/>
</a>

你需要说出你在做什么。你在写代码吗?什么语言?在你的问题中包含代码。我想通过XSLT代码编辑这个问题,希望帮助你总是能得到更好的答案,如果你首先向我们提供你已经尝试过的内容以及它不起作用的原因。这里的大多数人不会免费做你的工作。因此,基本上我编写了以下代码:a1/a1,但预期的输出是:2 3 4 5如何获得“a”父节点?我得到的输出是2 3 4 5,非常感谢!!