Получить содержимое узла XML с помощью c # - PullRequest
11 голосов
/ 03 июня 2010

простой вопрос, но я уже целый час обдумывал его, и это действительно начинает меня расстраивать. У меня есть XML, который выглядит так:

  <TimelineInfo>
    <PreTrialEd>Not Started</PreTrialEd>
    <Ambassador>Problem</Ambassador>
    <PsychEval>Completed</PsychEval>
  </TimelineInfo>

И все, что я хочу сделать, это использовать C #, чтобы получить строку, хранящуюся между <Ambassador> и </Ambassador>.

Пока у меня есть:

XmlDocument doc = new XmlDocument();
doc.Load("C:\\test.xml");
XmlNode x = doc.SelectSingleNode("/TimelineInfo/Ambassador");

, который отлично выбирает заметку, а теперь, как в мире я могу получить туда содержимое?

Ответы [ 4 ]

15 голосов
/ 03 июня 2010

Могу ли я предложить взглянуть на LINQ-to-XML ( System.Xml.Linq )?

var doc = XDocument.Load("C:\\test.xml");

string result = (string)doc.Root.Element("Ambassador");

LINQ-to-XML гораздо более дружественен, чем классы Xml * ( System.Xml ).


В противном случае вы сможете получить значение элемента путем получения свойства InnerText .

string result = x.InnerText;
4 голосов
/ 03 июня 2010

Свойство InnerText должно работать нормально.

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.innertext.aspx

FWIW, вы можете подумать о переключении API на linq-to-xml (XElement и друзья), так как ИМХО это дружественный, более простой API для взаимодействия.

Версия System.Xml (ПРИМЕЧАНИЕ. Приведение к XmlElement не требуется)

var xml = @"<TimelineInfo>
                <PreTrialEd>Not Started</PreTrialEd>
                <Ambassador>Problem</Ambassador>
                <PsychEval>Completed</PsychEval>
            </TimelineInfo>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var node = doc.SelectSingleNode("/TimelineInfo/Ambassador");
Console.WriteLine(node.InnerText);

версия linq-to-xml:

var xml = @"<TimelineInfo>
                <PreTrialEd>Not Started</PreTrialEd>
                <Ambassador>Problem</Ambassador>
                <PsychEval>Completed</PsychEval>
            </TimelineInfo>";
var root = XElement.Parse(xml);
string ambassador = (string)root.Element("Ambassador");
Console.WriteLine(ambassador);
3 голосов
/ 03 июня 2010
XmlDocument doc = new XmlDocument();
doc.Load("C:\\test.xml");
XmlNode x = doc.SelectSingleNode("/TimelineInfo/Ambassador");

x.InnerText вернет содержимое

0 голосов
/ 03 июня 2010

Попробуйте использовать Linq to XML - он обеспечивает очень простой способ запроса источников данных XML - http://msdn.microsoft.com/en-us/library/bb387098%28v=VS.100%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...