проблема, чтобы получить определенное значение элемента XML с помощью C # - PullRequest
2 голосов
/ 01 августа 2009

Предположим, у меня есть следующий документ XML, как получить значение элемента для a: name (в моем примере это значение Saturday 100)? Моя путаница заключается в том, как бороться с пространством имен. Спасибо.

Я использую C # и VSTS 2008.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <PollResponse xmlns="http://tempuri.org/">
       <PollResult xmlns:a="http://schemas.datacontract.org/2004/07/FOO.WCF" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
          <a:name>Saturday 100</a:name>
       </PollResult>
    </PollResponse>
  </s:Body>
</s:Envelope>

Ответы [ 3 ]

5 голосов
/ 01 августа 2009

Использовать класс System.Xml.XmlTextReader,

System.Xml.XmlTextReader xr = new XmlTextReader(@"file.xml");
        while (xr.Read())
        {
            if (xr.LocalName == "name" && xr.Prefix == "a")
            {
                xr.Read();
                Console.WriteLine(xr.Value);
            }
        }
4 голосов
/ 01 августа 2009

Проще, если вы используете классы LINQ to XML. Иначе пространства имен действительно раздражают.

XNamespace ns = "http://schemas.datacontract.org/2004/07/FOO.WCF";
var doc = XDocument.Load("C:\\test.xml"); 
Console.Write(doc.Descendants(ns + "name").First().Value);

Редактировать. Используя 2.0

XmlDocument doc = new XmlDocument();
doc.Load("C:\\test.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("a", "http://schemas.datacontract.org/2004/07/FOO.WCF");
Console.Write(doc.SelectSingleNode("//a:name", ns).InnerText);
3 голосов
/ 02 августа 2009

XPath - это прямой путь к битам XML-документа в 2.0

XmlDocument xml = new XmlDocument();
xml.Load("file.xml") 
XmlNamespaceManager manager = new XmlNamespaceManager(xml.NameTable);
manager.AddNamespace("a", "http://schemas.datacontract.org/2004/07/FOO.WCF");
string name = xml.SelectSingleNode("//a:name", manager).InnerText; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...