【问题标题】:How do I retrieve an XDocument's Element Value in XML escaped format?如何以 XML 转义格式检索 XDocument 的元素值?
【发布时间】:2017-08-30 17:24:39
【问题描述】:

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

答案:(感谢 Ed Plunkett)

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

【问题讨论】:

  • 所以要明确一点,您希望整个 XML 字符串采用无格式格式吗?
  • myXDoc.Descendants("element2").First().ToString()。顺便说一句,您的示例代码在编译之前需要做一些工作。
  • 在元素上调用 ToString() 会导致“Pork&Beans”,这并不理想。我希望得到“猪肉和豆类”。
  • @Sach 不,我只希望获得我在其 XML 安全格式中查询的那个值。
  • 另外,如果您使用XDocument 和朋友,您无需担心数据格式是否正确,它会为您完成。如果您是手动构建 XML...首先您不应该...

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


【解决方案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;

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多