SelectNodes с атрибутом, содержащим апостроф - PullRequest
5 голосов
/ 23 октября 2011

Я пытаюсь использовать 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);

Пожалуйста, помогите!

// Андерс

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Объекты &apos; преобразуются в одинарные кавычки, прежде чем парсер 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);
0 голосов
/ 23 октября 2011

Вы можете использовать :

//item[contains(@oor:path, &quot;['PickList']/OrderList&quot;)]

Проверка на основе 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, &quot;['PickList']/OrderList&quot;)]
     "/>
 </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"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...