Xml XSLT2.0中重复节点结构的XPath选择
我试图解决这个问题已经有一段时间了 XML示例是:Xml XSLT2.0中重复节点结构的XPath选择,xml,xslt,xpath,Xml,Xslt,Xpath,我试图解决这个问题已经有一段时间了 XML示例是: <node> <ID>123</ID> <work> <id>1</id> <title>Engineer</title> <description> <short>short</short> </description> </work>
<node>
<ID>123</ID>
<work>
<id>1</id>
<title>Engineer</title>
<description>
<short>short</short>
</description>
</work>
<work>
<id>2</id>
<title>Engineer</title>
<description>
<short>long</short>
</description>
</work>
</node>
因此,当我执行代码时,它也会忽略第一个节点,因为它们属于相同的
ID='123'
。此组具有相同的ID
可以重复N次。如何仅选择第二个工作
节点的描述
,每次重复时,XPath的值为“long”
,而不是基于文本值。据我所知,您希望先处理描述
来自每个节点
,其子ID
=123
它得出一个结论,即您有多个节点
元素,
因此,由于XML语法要求,它们必须是某个父级的子级
节点(我假设它们是直接子节点)
要获得所需的值,可以使用:
<xsl:value-of select="descendant::description[1]/short"/>
有关工作示例,请参见
我“扩展”了您的XML源代码,因此它包含2个节点
元素和我的
脚本从每个源
节点输出第一个描述
我不确定我是否完全理解您想要做什么。您是否只需要在每个节点中创建一个包含每个工作[2]/description/host
文本的节点?即每个节点的第二个简短描述
?没错。我想到达第二个节点,并说每次到达该节点时,不做任何其他事情。因此,您确实想为每个第一个
节点输出一些内容,但不想为第二个节点输出?您能展示一下您希望看到的示例输入XML的结果吗?感谢您的回复,我已经找到了解决方案,不久将在这里与大家分享。正如我在描述中所解释的,基于ID='123'这样的文本是不可接受的,因为文本可以更改,但是Xpath逻辑将始终是相同的,无论值是什么
long
long
<xsl:value-of select="descendant::description[1]/short"/>
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="root">
<xsl:copy>
<xsl:for-each select="node[ID='123']">
<description>
<xsl:value-of select="descendant::description[1]/short"/>
</description>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:transform>