如何使用XPath获取c#中属性的值?

时间:2011-04-26 17:02:55

标签: c# xml dom xpathdocument xpathnodeiterator

我想传递一个xpath查询并返回我找到的值。 我正在寻找属性的值。

_query = "//@RequestType";

我可以恢复节点,但我不确定如何从中获取字符串值。 我想查询以下xml的type属性并返回“xpath”。

如果我可以直接替换我的查询并从“好”中获得值“是”,那也很好。

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

C#

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 个答案:

答案 0 :(得分:1)

我的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));
}

答案 1 :(得分:0)

如果您在查询中返回“test”节点并且它包含一个名为“nice”的子节点,那么您需要从父“test”节点中选择“nice”子节点并按顺序返回它的InnerText从中获取字符串“是”。

我不确定是否回答了你的问题,因为我认为我并没有完全按照你的要求行事,但希望有所帮助

答案 2 :(得分:0)

XPathNavigator有一个Value属性,它将以字符串形式返回当前节点的值。如果您已经知道数据的类型,也可以使用ValueAsBoolean,ValueAsDateTime等。