SelectNodes 属性包含撇号

发布于 2024-12-11 13:36:27 字数 440 浏览 0 评论 0原文

我正在尝试使用 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, '[&apos;PickList&apos;]/OrderList')]", nsMgr);

请帮助!

// 安德斯

I'm trying to use SelectNodes where an attribute is containing a text with apostrophes

The attribute is oor:path and the node looks like this:

<item oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList">

I have tried with this code (and failed)...

XmlNodeList xnList = xml.SelectNodes("/oor:items/item[contains(@oor:path, '['PickList']/OrderList')]", nsMgr);

Please Help!

// Anders

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我们只是彼此的过ke 2024-12-18 13:36:27

' 实体在 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);

The ' entities are resolved into single quotes before the XPath parser can see them. Therefore, from its point of view, they cannot be distinguished from "real" single quotes.

You can delimit the argument to contains() with escaped double quotes and use single quotes in the expression:

XmlNodeList xnList = xml.SelectNodes(
    "/oor:items/item[contains(@oor:path, \"['PickList']/OrderList\")]", nsMgr);

Or, alternatively, using a verbatim string literal:

XmlNodeList xnList = xml.SelectNodes(
    @"/oor:items/item[contains(@oor:path, ""['PickList']/OrderList"")]", nsMgr);
旧梦荧光笔 2024-12-18 13:36:27

您可以使用

//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"/>

You can use:

//item[contains(@oor:path, "['PickList']/OrderList")]

XSLT - based verification:

<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>

when this transformation is applied on the following XML document:

<item xmlns:oor="hmm: oor"
oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"/>

The wanted, correctly selected node is copied to the output:

<item xmlns:oor="hmm: oor" oor:path="/org.openoffice.Office.Histories/Histories/org.openoffice.Office.Histories:HistoryInfo['PickList']/OrderList"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文