如何以XML转义格式检索XDocument的元素值?

时间:2017-08-30 17:24:39

标签: c# xml linq linq-to-xml

我正在构建一个XDocument,我有单元测试来测试输出。我想测试的一件事是正确地为XML格式化了无效字符串。我发现在XDoc上调用.ToString()可以正确格式化XML的无效字符串。但是,在我的测试中,我正在从XDoc中检索特定的元素或属性并测试值。这不会格式化XML的值。如何以转义格式获取这些值?

答案:(埃德·普兰克特先生)

myXDoc.Descendants("element2").First().FirstNode.ToString();
// result "Pork&Beans"

样品:

var xml = 
"<element1>" +
    "<element2>Pork&Beans</element2>" +
"</element1>";

var myXDoc = XDocument.Load(xml);

var xDocString = myXDoc.ToString();
// result is formatted - <element1> <element2>Pork&amp;Beans</element2> </element1>

var element2Value = myXDoc.Decendents("element2").First().Value;
// result is unformatted - Pork&Beans

1 个答案:

答案 0 :(得分:1)

知道了:XML中的文本元素也是节点。

var el2XML = myXDoc.Descendants("element2").First();
var porkAndAmpSemicolonBeans = el2XML.FirstNode.ToString();

您还要检查el2XML.Nodes.Count以确保其中只有一个孩子。

System.Xml.XmlDocument是另一种选择,因为XmlNode具有InnerXml属性,可以为您提供所需内容:

var morePorkAndBeans = doc.SelectSingleNode("//element2").InnerXml;