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) > 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) > 1]/string-join(p, ''), ',')) , ',')
希望对您有所帮助。
如有错误请指正
如果我有以下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) > 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) > 1]/string-join(p, ''), ',')) , ',')
希望对您有所帮助。
如有错误请指正