2016-04-28 3 views
2

я следующая строкаКак получить конкретное значение из строки XML в C#

<SessionInfo> 
    <SessionID>MSCB2B-UKT3517_f2823910df-5eff81-528aff-11e6f-0d2ed2408332</SessionID> 
    <Profile>A</Profile> 
    <Language>ENG</Language> 
    <Version>1</Version> 
</SessionInfo> 

теперь я хочу, чтобы получить значение из SessionID. Я попытался с ниже ..

var rootElement = XElement.Parse(output);//output means above string and this step has values 

но здесь ,,

var one = rootElement.Elements("SessionInfo"); 

это не work.what я могу это сделать.

и Что делать, если XML-строка, как below.can мы используем то же самое, чтобы получить SESSIONID

<DtsAgencyLoginResponse xmlns="DTS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="DTS file:///R:/xsd/DtsAgencyLoginMessage_01.xsd"> 
    <SessionInfo> 
    <SessionID>MSCB2B-UKT351ff7_f282391ff0-5e81-524548a-11eff6-0d321121e16a</SessionID> 
    <Profile>A</Profile> 
    <Language>ENG</Language> 
    <Version>1</Version> 
    </SessionInfo> 
    <AdvisoryInfo /> 
</DtsAgencyLoginResponse> 

ответ

5

rootElement уже ссылки <SessionInfo> элемент. Попробуйте так:

var rootElement = XElement.Parse(output); 
var sessionId = rootElement.Element("SessionID").Value; 
+1

Ницца, это сработало. Я проголосовал, и я приму ответ. – bill

+0

может быть, пожалуйста, посмотрите на часть 2 – bill

+1

@ bill Это совершенно другой вопрос – HimBromBeere

0

Пожалуйста, не делайте этого вручную. Это ужасно. Использование .NET встроенный в материал, чтобы сделать его более простым и надежным

XML Serialisation

Это правильный способ сделать это. Вы создаете классы и позволяете им автоматически сериализоваться из строки XML.

+3

«XElement' IS« .NET-Stuff »и поставляется с LinqToXml. Абсолютно нормально делать это так. – HimBromBeere

+0

Ну, Шерлок, как вы думаете, что используется под классами пространства имен Seriale. Это код, который ему не нужно писать из-за создания классов и добавления нескольких атрибутов к классам и свойствам. – user853710

+0

Я думаю, что OP интересуется только одним значением, поэтому ему не нужны эти накладные расходы на создание классов и добавление атрибутов serializer. Подход har07 работает умный и для этой цели совершенно абсурдный. – HimBromBeere

1

Вы можете выбрать узел, XPath, а затем получить значение:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(@"<SessionInfo> 
       <SessionID>MSCB2B-UKT3517_f2823910df-5eff81-528aff-11e6f-0d2ed2408332</SessionID> 
       <Profile>A</Profile> 
       <Language>ENG</Language> 
        <Version>1</Version> 
       </SessionInfo>"); 

string xpath = "SessionInfo/SessionID";  
XmlNode node = doc.SelectSingleNode(xpath); 

var value = node.InnerText; 
+0

Вызов 'String.Format' совершенно не нужен здесь –

0

Попробуйте этот метод:

private string parseResponseByXML(string xml) 
    { 
     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xml); 
     XmlNodeList xnList = xmlDoc.SelectNodes("/SessionInfo"); 
     string node =""; 
     if (xnList != null && xnList.Count > 0) 
     { 
      foreach (XmlNode xn in xnList) 
      { 
       node= xn["SessionID"].InnerText; 

      } 
     } 
     return node; 
    } 

Ваши узлы:

xmlDoc.SelectNodes("/SessionInfo");

Различные образцы

xmlDoc.SelectNodes("/SessionInfo/node/node"); 

Надеюсь, это поможет.