XPath连接多个节点

时间:2009-12-29 11:48:36

标签: xpath concatenation

我对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表达式来获取所有SubElements?目前,我正在使用:

 /*[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属性(不是我的选择,它是指定的)。我尝试了字符串连接,但它并没有真正起作用。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

如果您的评估方法受“第一个节点规则”的约束,那么它只会匹配第一个。如果您正在使用返回节点集的方法,那么它将返回所有节点集。

答案 2 :(得分:0)

您可以使用以下方式获取所有子元素:

//SubElement

但这不会让他们按照你想要的方式组合在一起。您将需要对包含SubElement的所有元素进行查询(基本上搜索任何SubElement的父元素)。

//parent::SubElement

一旦你拥有了它,你可以(根据你的编程语言)遍历父节点并连接SubElements。