return 多个子节点值的字符串串联数组的 XPath

XPath to return a array of string concatenation of multiples child node values

如果我有以下XML

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

如何为 return 字符串数组指定 xpath,如下所示:

{ 1, 2, 46 }

我所做的所有尝试 return 产生了以下结果:

{ 1, 2, 4, 6}    

给你

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

将 return 1,2,46

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

技巧如下:

第一部分

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

这只会 select 只有一个 p 标签的 div .. 所以这里不需要串联。这将得到

1,2

第二部分 字符串连接(//div[count(p) > 1]/字符串连接(p, ''), ',')

这部分将所有 p 标签合并到同一个 div 下,然后加入所有具有多个 p chid 标签的开发。

这部分会得到

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, ''), ',')) , ',')

希望对您有所帮助。

如有错误请指正