【问题标题】:Special symbols disappear when using XDocument.Load使用 XDocument.Load 时特殊符号消失
【发布时间】:2016-01-14 14:41:48
【问题描述】:

据我所知,XML 中有几个符号应该被替换,因为它们在 xml 中以纯形式无效:

< - &lt;
& - &amp;
> - &gt;
" - &quot;
' - &apos;

所以,我正在尝试使用 XDocument.Load(string uri) 加载 xml 文档。 例如,我的 xml 文档中的字符串如下所示:

        <net name="&lt;const0&gt;_1"/>

但是当我的 xml 被加载时,这个字符串在 XDocument 中表示为

        <net name="<const0>_1"/>

我尝试使用 xdocument.Save(string uri) 保存它,但结果 LT 和 GT 符号没有被替换为 & lt;和>它仍然看起来像 。实际上,当我再次加载它时,没有抛出异常。 这让我很困惑。如果这些符号无效,这些符号如何存在于保存的 xml 文件中?如何使用特殊符号替换保存我的 xml 文件?我正在阅读的 xml 文件和我要保存的 XDocument 有一个使用 UTF-8 编码的声明。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    在属性中,&lt;&gt; 字符是有效的,这就是它们不被替换的原因。在 Text 元素中,它们总是被实体化:

    <net>
        <name>&lt;const0&gt;_1</name>
    </net>
    

    同样,"' 可以作为 Text 元素,但会根据封闭的引号类型在属性中被替换。

    如何使用特殊符号替换保存我的 xml 文件?

    你不需要关心这个。底层XmlWriter 将进行必要的替换。

    【讨论】:

    • 好的,这对我来说很有意义。但我也有这样的情况: 如果我理解正确 ' 符号没有被替换为因为它被 " 符号包围?
    • 基本上是的,但这取决于实现。如果要强制保留实体,可以实现自定义编写器:stackoverflow.com/a/32177761/5114784
    【解决方案2】:

    《Q 3.23:XML中有哪些特殊字符?

     Just five: &lt; (<), &amp; (&), &gt; (>), &quot; ("), and &apos; (')."
    

    http://xml.silmaril.ie/specials.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2013-10-17
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      相关资源
      最近更新 更多