Разбор XML в C# из потока

Я пробовал несколько методов, от Linq до загрузки данных в XML-документ, но я не могу вернуть результат, который мне нужен.

вот пример XML:

<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service" xmlns:com="http://www.webex.com/schemas/2002/06/common" xmlns:event="http://www.webex.com/schemas/2002/06/service/event"><serv:header><serv:response><serv:result>SUCCESS</serv:result><serv:gsbStatus>PRIMARY</serv:gsbStatus></serv:response></serv:header><serv:body><serv:bodyContent xsi:type="event:createEventResponse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><event:sessionKey>11111111</event:sessionKey><event:guestToken>111111111111111111111</event:guestToken></serv:bodyContent></serv:body></serv:message>

И вот что я пытался сделать:

StreamReader reader = new StreamReader(dataStream);
XmlDocument doc = new XmlDocument();
doc.LoadXml(reader.ReadToEnd());
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
XmlNamespaceManager ns2 = new XmlNamespaceManager(doc.NameTable);
XmlNamespaceManager ns3 = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("serv", "http://www.webex.com/schemas/2002/06/service");
ns2.AddNamespace("com", "http://www.webex.com/schemas/2002/06/common");
ns3.AddNamespace("event", "http://www.webex.com/schemas/2002/06/service/event");
XmlNode node = doc.SelectSingleNode("result",ns);

Тем не менее, по какой-то причине я не могу вернуть реальный результат, который должен быть либо "УСПЕХ", либо "НЕИСПРАВНОСТЬ" на основе фактического XML выше.

Как я могу это сделать?

2 ответа

Решение

Это работает:

XDocument doc = XDocument.Load(@"test.xml");
XNamespace serv = "http://www.webex.com/schemas/2002/06/service";
var result = doc.Descendants(serv + "result").First().Value;

Ваш запрос xpath неверен.

Попробуй это:

XmlNode node = doc.SelectSingleNode("//serv:result",ns);

или же

XmlNode node = doc.SelectSingleNode("serv:message/serv:header/serv:response/serv:result",ns);
Другие вопросы по тегам