Получить содержимое XML node с помощью С#

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

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

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

До сих пор я:

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

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

Ответ 1

Могу ли я предложить взглянуть на 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;

Ответ 2

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

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

FWIW, вы можете подумать о переключении API на linq-to-xml (XElement и друзей), поскольку IMHO это дружелюбный, более простой 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

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

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