我对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属性(不是我的选择,它是指定的)。我尝试了字符串连接,但它并没有真正起作用。
答案 0 :(得分:5)
string-join(/file/Element3/SubElement, ',')
答案 1 :(得分:0)
/File/Element3/SubElement
将匹配示例XML中的所有SubElement
元素。你用它来评估它?
如果您的评估方法受“第一个节点规则”的约束,那么它只会匹配第一个。如果您正在使用返回节点集的方法,那么它将返回所有节点集。
答案 2 :(得分:0)
您可以使用以下方式获取所有子元素:
//SubElement
但这不会让他们按照你想要的方式组合在一起。您将需要对包含SubElement的所有元素进行查询(基本上搜索任何SubElement的父元素)。
//parent::SubElement
一旦你拥有了它,你可以(根据你的编程语言)遍历父节点并连接SubElements。