Xml XSLT:仅复制某些节点

Xml XSLT:仅复制某些节点,xml,sorting,xslt,copy,filtering,Xml,Sorting,Xslt,Copy,Filtering,您能告诉我如何使用XSLT形成这个表单吗 输入: 输出: 即,复制所有内容,但如果是DD,则仅在EEE/@type=“foo”时复制,并按EEE/@value对所有DD进行排序 现在,我刚刚找到了xsl代码,它可以复制所有内容,并以EEE/@type为例进行排序 XSLT: 这已经足够好了,但我真的只想保留那些包含EEE/@type=foo的DD 非常感谢。请尝试使用xpath选择所需的节点 这应该只复制属性类型为foo的“EEE”元素 <xsl:template match=

您能告诉我如何使用XSLT形成这个表单吗

输入:

输出:

即,复制所有内容,但如果是DD,则仅在EEE/@type=“foo”时复制,并按EEE/@value对所有DD进行排序

现在,我刚刚找到了xsl代码,它可以复制所有内容,并以EEE/@type为例进行排序

XSLT:

这已经足够好了,但我真的只想保留那些包含EEE/@type=foo的DD


非常感谢。

请尝试使用xpath选择所需的节点

这应该只复制属性类型为foo的“EEE”元素

<xsl:template match="//EEE[@type='foo']">
    <xsl:copy>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>


您只需要添加一个模板

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:strip-space elements="*" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()">
        <xsl:sort select="EEE/@type" />
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="DD[not(EEE/@type = 'foo')]"/>


这确保了那些
DD
元素的
EEE/@type
不等于
'foo'
不会被复制。

您可以发布您当前拥有的XSLT代码吗。希望它只是对代码的一个小调整,以检查相关的@type属性。谢谢完成了,蒂姆C!谢谢你的回复。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:strip-space elements="*" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()">
        <xsl:sort select="EEE/@type" />
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
<xsl:template match="//EEE[@type='foo']">
    <xsl:copy>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:strip-space elements="*" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()">
        <xsl:sort select="EEE/@type" />
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:strip-space elements="*" />
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()">
        <xsl:sort select="EEE/@type" />
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="DD[not(EEE/@type = 'foo')]"/>