我正在尝试使用SelectNodes,其中属性包含带有撇号的文本
属性是oor:path,节点如下所示:
<item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList">
我尝试过这段代码(并且失败了)......
XmlNodeList xnList = xml.SelectNodes("/oor:items/item[contains(@oor:path, '['PickList']/OrderList')]", nsMgr);
请帮助!
// Anders
答案 0 :(得分:1)
在XPath解析器可以看到之前,'
个实体被解析为单引号。因此,从它的角度来看,它们不能与“真正的”单引号区别开来。
您可以使用转义双引号将参数分隔为contains()
,并在表达式中使用单引号:
XmlNodeList xnList = xml.SelectNodes(
"/oor:items/item[contains(@oor:path, \"['PickList']/OrderList\")]", nsMgr);
或者,使用逐字字符串文字:
XmlNodeList xnList = xml.SelectNodes(
@"/oor:items/item[contains(@oor:path, ""['PickList']/OrderList"")]", nsMgr);
答案 1 :(得分:0)
您可以使用:
//item[contains(@oor:path, "['PickList']/OrderList")]
基于XSLT的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:oor="hmm: oor">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"//item[contains(@oor:path, "['PickList']/OrderList")]
"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<item xmlns:oor="hmm: oor"
oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"/>
将所需的正确选择的节点复制到输出:
<item xmlns:oor="hmm: oor" oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"/>