2010-04-23 50 views
4

我遇到的问题是我正在为Sitecore CMS系统执行的XPath查询。XPath和特殊字符

此查询工作正常:

/根/内容/元数据/提示/ *

但当我尝试这个办法:

/根/内容/元数据/提示/ * [@ SomeAttribute ='somekey']

我得到一个错误,说“在位置22预期的字符串结束”,这是破折号字符被发现的地方。我的印象是,破折号不是XML中的特殊字符......我在这里做错了什么?我需要以某种方式编码吗?或者这是XPath解析器中的错误?任何建议的解决方法?

回答

12

更改此:

/root/content/Meta-Data/Tips/*[@SomeAttribute='somekey'] 

要这样:

/root/content/#Meta-Data#/Tips/*[@SomeAttribute='somekey'] 
+0

这很有效。有趣的是,如果我排除[@someattribute]过滤器,它会失败。你有这个来源?我没有看到它在W3C Xpath文档中提到。它同样在下面的XPath测试器awshepard链接上失败。 – Bryan 2010-04-23 21:44:31

+1

http://sitecoredev.blogspot.com/2006/04/sitecore-xpath.html – 2010-04-23 22:48:30

+0

我明白了......它不是真正的XPath实现。感谢您的链接。 – Bryan 2010-04-24 00:17:30

0

按照XML spec在标签名中的字符,连字符应该是一个有效的字符。我已经用this site做了一些XPath测试,发现它与其他解析器的结果进行比较是有帮助的。

+0

谢谢。两个原始查询都可以在这里使用破折号节点名称。 – Bryan 2010-04-23 21:49:41

+0

链接到这个答案的原始网站不再有效,更新到有效的东西。 – cgp 2013-04-26 14:43:42