& 在 XElement 中

& in XElement

我想使用 System.Xml.Linq.XElement 生成 <element>&amp;</element>

我试过这个:new XElement("element", "&amp;") 但它转义了符号并生成:<element>&amp;amp;</element>

我能想到的唯一解决方法是创建一个继承自 XText 的自定义 class,覆盖 WriteTo 方法并使用 XmlWriter => WriteEntityRef方法。在我看来,这有点矫枉过正。还有其他方法吗?

您已经在评论中找到了解决方案,只是一些背景知识:

你必须明白内容as is (outside the XML)和它的表示内XML。在 XML 之外你看到的是纯内容,当它被写入 XML 时它会自动转义,在读取时它又是 re-escaped。

I tried this: new XElement("element", "&amp;") but it escapes the ampersand and it generates: <element>&amp;amp;</element>

这清楚地表明发生了什么。通过传入 &amp; 你会得到 &amp;amp;。引擎看到 & 并将其替换为实体。

只需使用 new XElement("element", "&") 即可获得所需的结果。

正如评论和答案中所建议的那样,new XElement("element", "&") 实际上将利用框架正确转义 & 符号。

我遇到的部分问题是,最初我试图将 &nbsp; 放入我的 xml 元素中,但收效甚微。我不知道除非我的 XML 有一个定义 &nbsp; 的 DTD,否则我不能使用 &nbsp;

从那时起,我更新了我的问题,改为使用 &amp;,这反过来又改变了 XElement 的行为,因为与 space 不同,& 需要转义XML,LINQ to XML 会自动执行此操作(如预期)。