&安培;在XElement中

时间:2018-02-28 17:51:26

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

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

我试过了这个:new XElement("element", "&amp;")但是它逃脱了与号并产生了:<element>&amp;amp;</element>

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

2 个答案:

答案 0 :(得分:2)

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

您必须了解内容外部 XML)表示 XML 之间的区别。在XML之外,您可以看到普通内容,当它被写入XML时会自动转义,在读取时会再次重新转义。

  

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

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

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

答案 1 :(得分:0)

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

我遇到的部分问题是,最初我试图将&nbsp;放入我的xml元素中并没有太大成功。我不知道除非我的XML有一个定义&nbsp;的DTD,否则我不能使用&nbsp;

从那时起,我更新了我的问题,改为使用&amp;,这又改变了XElement的行为,因为与空格不同,&需要在XML中转义,LINQ转换为XML自动执行此操作(按预期方式)。