节点值

时间:2016-11-06 22:46:52

标签: xslt xpath

我需要一个xpath表达式,它将根据条件拆分xml文档,从而为每个唯一文档获取一个文档(如下例所示)。

下面的xml示例应该会产生2个文档(id 100和200)。我不想硬编码值......

我有什么想法可以用xpath表达式做到这一点?

(我知道我可以使用表达式/ data / employee获得4个文档)

示例:

<data>
    <employee>
        <id>100</id>
        <tag>A</tag>
    </employee>
    <employee>
        <id>100</id>
        <tag>B</tag>
    </employee>
    <employee>
        <id>200</id>
        <tag>A</tag>
    </employee>
    <employee>
        <id>200</id>
        <tag>B</tag>
    </employee>
</data>

示例输出:

文件#1

<data>
    <employee>
        <id>100</id>
        <tag>A</tag>
    </employee>
    <employee>
        <id>100</id>
        <tag>B</tag>
    </employee>
</data>

文件#2

<data>
    <employee>
        <id>200</id>
        <tag>A</tag>
    </employee>
    <employee>
        <id>200</id>
        <tag>B</tag>
    </employee>
</data>

2 个答案:

答案 0 :(得分:2)

在XSLT 2.0中,这是一个标准的分组用例:

<xsl:for-each-group select="employee" group-by="id">
  <xsl:result-document href="{position()}.xml">
    <data>
      <xsl:copy-of select="current-group()"/>
    </data>
  </xsl:result-document>
</xsl:for-each-group>

答案 1 :(得分:0)

XPath是一种查询语言,而不是文档转换。因此,仅使用XPath无法完成任务。您的问题也没有告诉它正在运行的环境,因此无法给出彻底的答案。

话虽这么说,这种方法可能就是你所需要的:

  • 查询/data/employee/id并将节点值添加到集合中(例如一袋不同的值)。
  • 循环显示不同的值,并构建一个这样的查询,以获取每个员工的匹配节点:/data/employee[id=ID](用ID替换当前正在迭代的不同值)。< / LI>
  • 您可以使用这些结果来构建派生文档,但是如何完成这取决于环境。