Как использовать XPath, чтобы получить значение атрибута в C #? - PullRequest
1 голос
/ 26 апреля 2011

Я хотел бы передать запрос xpath и вернуть значение того, что я нашел. Я ищу значение атрибута специально.

_query = "//@RequestType";

Я могу вернуть узел обратно, но я не уверен, как извлечь из него строковое значение. Я хочу запросить следующий xml для его атрибута type и получить "xpath" обратно.

Было бы также неплохо, если бы я мог просто заменить свой запрос и получить значение yes из значения nice.

<?xml version="1.0" ?>
<test type="xpath">
   <nice>yes</nice>
</test>

с #

public string Locate(string message)
        {
    using (var stream = new MemoryStream(Encoding.GetBytes(message)))
    {
       var doc = new XPathDocument(stream);
       var nav = doc.CreateNavigator();
       var result = nav.Select(_query);
       if (result != null)
       {
          return result
       }
    }
   }

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Мой xPath в лучшем случае слаб, но попробуйте следующее:

var doc = new XPathDocument(stream);
var nav = doc.CreateNavigator();    
foreach (XPathNavigator test in nav.Select("test"))
{
    string type = test.SelectSingleNode("@type").Value;
    string nice = test.SelectSingleNode("nice").Value;
    Console.WriteLine(string.Format("Type: {0} - Nice: {1}", type, nice));
}
0 голосов
/ 26 апреля 2011

XPathNavigator имеет свойство Value, которое будет возвращать значение текущего узла в виде строки. Вы также можете использовать ValueAsBoolean, ValueAsDateTime и т. Д., Если вы уже знаете тип ваших данных.

0 голосов
/ 26 апреля 2011

Если вы возвращаете «тестовый» узел в своем запросе, и он содержит дочерний узел с именем «nice», тогда вам нужно выбрать «nice» дочерний узел из родительского «test» узла и вернуть его InnerText в порядке чтобы получить строку "да" из нее.

Я не уверен, что это отвечает на ваш вопрос, потому что я не думаю, что полностью следовал тому, что вы просили, но, надеюсь, это поможет

...