XPath返回多个子节点值的字符串连接数组

时间:2015-04-15 12:43:30

标签: xml xpath string-concatenation

如果我有以下XML

<div>
    <p>1</p>
</div>
<div>
    <p>2</p> 3 
</div>
<div>
    <p>4</p> 5 <p>6</p>
</div>

如何指定xpath以返回如下字符串数组:

{ 1, 2, 46 }

我所做的所有尝试都返回了以下结果:

{ 1, 2, 4, 6}    

1 个答案:

答案 0 :(得分:3)

你在这里

concat(string-join(//div[count(p) = 1]/p, ',') , ',' , string-join(//div[count(p) &gt; 1]/string-join(p, ''), ','))

将返回1,2,46

因为你需要在同一个div标签下连接一些p标签,所以在所有情况下,这将产生一个字符串,可以通过tokenise()函数转换为数组。

这就是诀窍:

第一部分

string-join(//div[count(p) = 1]/p, ',')

这将只选择只有一个p标签的div ..所以这里不需要连接。这将得到

1,2

第二部分 string-join(// div [count(p)&gt; 1] / string-join(p,''),',')

这部分将同一div下的所有p标签连接起来,然后加入所有具有多个p chid标签的dev。

这部分将获得

46

<强> 实施例

<div>
    <p>1</p>
</div>
<div>
    <p>2</p> 3 
</div>
<div>
    <p>4</p> 5 <p>6</p>
</div>
<div>1<p>2</p>3 , 1<p>2</p><p>3</p>4</div>

输出

1,2,46,223

如果你想将它作为数组,你可以对其进行标记。

tokenize(concat(string-join(//div[count(p) = 1]/p, ',') , ',' , string-join(//div[count(p) &gt; 1]/string-join(p, ''), ',')) , ',')

我希望这可以提供帮助。

如果我错了,请纠正我。