Xml XSLT2.0中重复节点结构的XPath选择

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>

我试图解决这个问题已经有一段时间了

XML示例是:

<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>