Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT选择唯一节点_Xslt_Get_Distinct - Fatal编程技术网

XSLT选择唯一节点

XSLT选择唯一节点,xslt,get,distinct,Xslt,Get,Distinct,对于像我这样的xslt新手来说,这让我发疯 输入: <root> <a><name>kyle</name></a> <b><name>stan</name></b> <b><name>wendy</name></b> <b><name>cece</name></b>

对于像我这样的xslt新手来说,这让我发疯

输入:

<root>
    <a><name>kyle</name></a>
    <b><name>stan</name></b>
    <b><name>wendy</name></b>
    <b><name>cece</name></b>
</root>

凯尔
斯坦
温迪
塞西
预期产出:

<root>
        <a><name>kyle</name></a>
        <b><name>stan</name></b>
</root>

凯尔
斯坦
我被要求返回“根”下的第一个唯一节点,我该怎么做

XSLT1.0或2.0都可以


非常感谢你

您可以匹配具有相同名称的前一个同级的任何元素,而不输出任何内容

XSLT示例:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="/*/*[preceding-sibling::*[name() = current()/name()]]"/> 

</xsl:stylesheet>

输出(使用Saxon 9 HE):


凯尔
斯坦

XSLT2.0解决方案:

<?xml version="2.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
  <root>
    <xsl:for-each-group select="root/*" group-by="local-name()">
      <xsl:copy-of select="."/>
    </xsl:for-each-group>
    </root>
  </xsl:template>
</xsl:stylesheet>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <a>
      <name>kyle</name>
  </a>
   <b>
      <name>stan</name>
  </b>
</root>

凯尔
斯坦
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <a>
      <name>kyle</name>
  </a>
   <b>
      <name>stan</name>
  </b>
</root>