![]() |
1
57
这是非常困难的。 看看 XPath Recommendation ,您将看到它将文本定义为:
也就是说,xpath表达式中的字符串文本可以包含撇号或双引号,但不能同时包含两者。 你不能用逃跑来逃避这个。像这样的文字:
将匹配此XML文本:
这意味着有可能有一段XML文本无法生成要匹配的xpath文本,例如:
但这并不意味着不可能将该文本与xpath匹配,这只是一个棘手的问题。在任何情况下,如果要匹配的值同时包含单引号和双引号,则可以构造使用
这就导致了这一点,这比我希望的要复杂得多:
是的,我用所有边缘的箱子测试过。这就是逻辑如此复杂的原因:
|
![]() |
2
6
编辑: 在一个繁重的单元测试会话之后,检查 XPath Standards ,我修改了我的职能如下:
看来xpath根本没有字符转义系统,它真的很原始。显然,我的原始代码只是巧合。我很抱歉误导了任何人! 以下原始答案仅供参考-请忽略 为了安全起见,请确保对xpath字符串中所有5个预定义XML实体的任何出现进行转义,例如
我以前做过,而且效果很好。如果它对您不起作用,也许您需要让我们了解这个问题的一些额外背景。 |
![]() |
3
5
我将罗伯特的答案移植到Java(在1.6中测试):
希望这能帮助别人! |
![]() |
4
5
到目前为止,解决这个问题的最佳方法是使用XPath库提供的工具来声明一个可以在表达式中引用的XPath级别变量。然后,变量值可以是宿主编程语言中的任何字符串,并且不受xpath字符串文本的限制。例如,在Java中
对C
|
![]() |
5
3
这里的大多数答案都集中在如何使用字符串操作来拼凑一个使用有效的字符串分隔符的XPath。 我要说的是,最佳做法是不要依赖如此复杂和潜在脆弱的方法。 以下内容适用于.NET,因为此问题标记为C。阿兰·罗伯茨提供了我认为在Java中使用XPath时最好的解决方案。 现在,您可以使用linq-to-xml来查询XML文档,这种方式允许您直接在查询中使用变量。这不是xpath,但目的是相同的。 对于OP中给出的示例,可以这样查询所需的节点:
或者使用查询理解语法:
.NET还提供了一种在xpath查询中使用xpath变量的方法。遗憾的是,要做到这一点并非易事,而是使用我在中提供的一个简单的助手类。 this other SO answer 很容易。 您可以这样使用它:
|
![]() |
6
2
这里有一个替代Robert Rossney的StringBuilder方法,可能更直观:
|
![]() |
7
2
您可以使用搜索和替换来引用xpath字符串。 在f*中
我没有广泛地测试过它,但似乎有效。 |
![]() |
8
0
如果某个值中没有双引号,可以使用转义双引号指定要在XPath搜索字符串中搜索的值。
|
![]() |
9
0
您可以使用
对于EX:
|
![]() |
10
-1
我以前遇到过这个问题,看起来是最简单但不是最快的解决方案,就是在XML文档中添加一个新节点,该节点具有值为“someValue”的属性,然后使用简单的xpath搜索来查找该属性值。完成操作后,可以从XML文档中删除“临时节点”。 这样,整个比较都是“内部”进行的,因此您不必构建奇怪的XPath查询。 我似乎记得为了加快速度,您应该向根节点添加temp值。 祝你好运。。。 |
|
J_Cus504 · 在单匹配语句中使用身份变换和多谓词来沉默节点 3 月前 |
![]() |
surge3333 · 使用PowerShell构建XML 4 月前 |
|
Sandeep · XSLT代码,用于根据条件提取元素值 5 月前 |
|
Reto · XSLT 3.0突发流-如何存储/获取另一个分支的值 5 月前 |
![]() |
Ian Kemp · 如何从SelectXml调用本机XPath函数? 6 月前 |