我有一个XML文档,其中包含我想要删除的破折号项
例如
<xmlDoc>
<items>
<item>a-b-c</item>
<item>c-d-e</item>
<items>
</xmlDoc>
Run Code Online (Sandbox Code Playgroud)
我知道我可以找到 - 使用此xpath替换单个项目
/xmldoc/items/item[1]/translate(text(),'-','')
Run Code Online (Sandbox Code Playgroud)
哪个会回归
"ABC"
但是,我如何为整套设备做到这一点?
这不起作用
/xmldoc/items/item/translate(text(),'-','')
Run Code Online (Sandbox Code Playgroud)
也不是这个
translate(/xmldoc/items/item/text(),'-','')
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?
Dim*_*hev 13
我知道我可以找到 - 使用此xpath替换单个项目
Run Code Online (Sandbox Code Playgroud)/xmldoc/items/item[1]/translate(text(),'-','')哪个会回归
Run Code Online (Sandbox Code Playgroud)"abc"但是,我如何为整套设备做到这一点?
单个XPath 1.0表达式无法完成此操作.
使用以下XPath 2.0表达式生成一个字符串序列,每个translate()字符串是在相应节点的字符串值上应用函数的结果:
/xmlDoc/items/item/translate(.,'-', '')
Run Code Online (Sandbox Code Playgroud)
该translate函数在输入中接受一个字符串和不是一个节点集。这意味着编写如下内容:
"translate(/xmlDoc/items/item/text(),'-','')"
Run Code Online (Sandbox Code Playgroud)
或者
"translate(/xmlDoc/items/item,'-','')"
Run Code Online (Sandbox Code Playgroud)
将导致仅在第一个节点 ( item[1])上调用函数。
在 XPath 1.0 中,我认为除了做一些丑陋的事情外,你别无选择:
"concat(translate(/xmlDoc/items/item,'-',''),
translate(/xmlDoc/items/item[2],'-',''))"
Run Code Online (Sandbox Code Playgroud)
这对于大量项目是私有的,并且只返回一个 string。
在XPath 2.0 中,这可以使用for 表达式很好地解决:
"for $item in /xmlDoc/items/item
return replace($item,'-','')"
Run Code Online (Sandbox Code Playgroud)
它返回一个序列类型:
abc cde
Run Code Online (Sandbox Code Playgroud)
PS不要将函数调用与位置路径混淆。它们是不同种类的表达式,在 XPath 1.0 中不能混合使用。
| 归档时间: |
|
| 查看次数: |
19950 次 |
| 最近记录: |