我需要一个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>
答案 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>