XPath连续多个节点

问题描述:

我对xpath不是很熟悉。但我正在使用xpath表达式并将它们设置在数据库中。其实它只是biztalk的BAM工具。XPath连续多个节点

无论如何,我有一个XML可能看起来像:

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

我在想,如果有使用让所有的子元素concatted的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属性(不是我的选择,它是指定的)。我尝试了字符串连接,但它并不真正起作用。

+0

第二次不应该是''吗? – Anthony 2009-12-31 09:59:30

+0

没有那整点 – WtFudgE 2010-01-12 13:35:13

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

+7

不幸的是,string-join()不在XPath 1.0中。 :-( – danorton 2011-07-08 20:07:53

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

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

您可以通过使用得到所有子元素:

//SubElement 

但这不会将它们组合在一起,你怎么想。您将希望对包含SubElement的所有元素执行查询(基本上会搜索任何SubElement的父元素)。

//parent::SubElement 

一旦你的,你可以(根据您的编程语言)遍历父母并连接所有的子元素。