XPath 合并多个节点

4

我对xpath并不是很熟悉。但我正在使用xpath表达式,并将它们设置在数据库中。实际上,这只是biztalk的BAM工具。

无论如何,我有一个可能看起来像这样的xml:

<File>
  <Element1>element1<Element1>
  <Element2>element2<Element2>
  <Element3>
    <SubElement>sub1</SubElement>
    <SubElement>sub2</SubElement>
    <SubElement>sub3</SubElement>
  <Element3>
</File>

我想知道是否有一种方法可以使用xpath表达式来获取所有子元素的连接?目前,我正在使用:
 /*[local-name()='File']/*[local-name()='Element3']/*[local-name()='SubElement']

如果只有一个索引,这个方法是有效的。但显然我的 XML 有时有更多节点,因此它会返回 NULL。我可以使用...
/*[local-name()='File']/*[local-name()='Element3']/*[local-name()='SubElement'][0]

但是我需要所有节点。有没有办法做到这一点?

非常感谢!

编辑:我更改了XML,我错了,它不同,应该长这样:

<item>
    <element1>el1</element1>
    <element2>el2</element2>
    <element3>el3</element3>
    <element4>
        <subEl1>subel1a</subEl1>
        <subEl2>subel2a</subEl2>
    </element4>
    <element4>
        <subEl1>subel1b</subEl1>
        <subEl2>subel2b</subEl2>
    </element4>
</item>

我需要一行代码来得到这样的结果:"subel2a subel2b";

我需要一行代码,因为我将此xpath表达式设置为xml属性(不是我的选择,是指定的)。我尝试过使用string-join,但它并没有真正起作用。


第二次不应该是<element5>吗? - Anthony
3个回答

5

string-join(/file/Element3/SubElement, ',')


8
很遗憾,string-join() 函数不在 XPath 1.0 中。 :-( - danorton

0

/File/Element3/SubElement 将匹配您的示例 XML 中所有的 SubElement 元素。您使用什么来评估它?

如果您的评估方法受到“第一个节点规则”的影响,那么它只会匹配第一个。如果您使用返回节点集的方法,则会返回所有匹配的元素。


0

您可以使用以下代码获取所有子元素:

//SubElement

但这样做不能按照您想要的方式将它们分组在一起。您需要查询包含SubElement的所有元素(基本上搜索任何SubElements的父级)。

//parent::SubElement

一旦你有了这个,你可以(根据你的编程语言)循环遍历父元素并连接子元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接