Требуется помощь XPath - PullRequest
       1

Требуется помощь XPath

1 голос
/ 01 ноября 2010

С учетом следующего XML:

<Animals xmlns="http://www.company.com/Global/US">
    <Mammals>
        <Animal>
            <Type>
                <Name>Cat</Name>
                <Breed>Ally Cat</Breed>
            </Type>
            <Color>
                <R>0</R>
                <G>0</G>
                <B>0</B>
            </Color>
        </Animal>
        <Animal>
            <Type>
                <Name>Dog</Name>    <-- I know this
                <Breed>Weimeraner</Breed>
            </Type>
            <Color>
                <R>190</R>    <- I need the value of this
                <G>190</G>
                <B>190</B>
            </Color>
        </Animal>
    <Mammals>
</Animals>

Как я могу получить целочисленное значение для узла R цвета, если я знаю, что Имя - "Собака"?

не работает для меня.

var xmlDoc = new XmlDocument(xml);
var nsm = new XmlNamespaceManager(_xmlDoc.NameTable);
nsm.AddNamespace("ns", "http://www.company.com/Global/US");
var typeNode = xmlDoc.SelectSingleNode("/ns:Animals/ns:Mammals/ns:Animal/ns:Type/ns:Name[. = 'Dog']", nsm);
var r_val = typeNode.ParentNode.ParentNode.SelectSingleNode("/ns:Color/ns:R", nsm).InnerText;

typeNode в этом коде дает мне правильный узел, но затем переходит к узлу дедушки и выбора внутри, что дает мне ноль, и поэтому InnerText взрывается.

Есть ли лучшее выражение XPath, которое я могу использовать, чтобы получить это?

Это должно быть в c # 2.0, поэтому, к сожалению, Linq и XDocument не могут поддерживаться.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 01 ноября 2010

Я ничего не знаю о C #, но это выражение xpath должно дать вам правильный узел

//Animal[Type/Name = 'Dog']/Color/R
0 голосов
/ 01 ноября 2010

Попробуйте это (с префиксом ns, связанным с http://www.company.com/Global/US URI пространства имен):

/ns:Animals/ns:Mammals/ns:Animal[ns:Type/ns:Name = 'Dog']/ns:Color/ns:R
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...