我尝试使用XPath查询解析XML节点中的字符串,该查询要求我删除子字符串并读取剩余值。在我可以获得该值之前,子字符串可能在它之前和之后具有动态数量的空白,因此在XPath中使用某种indexOf函数会很有帮助。我正在尝试使用substring-after,但XPath很可能是1.0,根据this post可能会使这更难实现。以下是我尝试解析的XML示例:
<root>
<myField> StringToParse 7</myField>
</root>
我试图获得字符串中的值7,这似乎可以通过substring-after和normalize-space的某种组合来实现。我并不完全确定我正确使用它,因为无论我尝试使用哪种方式,结果都是空值或整个字符串,子字符串未被删除。
我能够返回整个值(两个邪恶中较小的一个)的方式是:
/myField[substring-after(.,'StringToParse')]
我希望能回复'7'任何人都可以让我知道我的语法错误,或者我是否应该用另一种方法来完成我想要的工作?
谢谢,
麦克
答案 0 :(得分:4)
我能够返回整个的方式 价值(两个邪恶中较小的一个)是:
/myField[substring-after(.,'StringToParse')]
, 我希望能回归'7' 任何人都可以让我知道我在做什么 错
你很接近,但表达式至少有两个问题:
/myField[substring-after(.,'StringToParse')]
myField
不是文档中的顶级元素,此表达式要求选择顶部元素,并且此元素的名称为myField
。如果根据提供的XML文档进行评估,则不会选择任何节点,因为提供的XML文档中的top元素名为root
。
对substring-after()
的函数调用位于谓词中。这意味着要选择名为myField
的顶级节点取决于对substring-after()
的调用值,转换为布尔值。这显然是你想要的 - 你不想要一个节点 - 你想要一个字符串!
<强>解决方案强>:
substring-after(/*/myField, 'StringToParse')
评估为(不带引号):
" 7"
更好的解决方案可能是:
normalize-space(substring-after(/*/myField, 'StringToParse'))
评估为:
"7"