在XElement中

问题描述 投票:0回答:2

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

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

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

c# xml linq linq-to-xml
2个回答
2
投票

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

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

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

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

只需使用new XElement("element", "&"),它可以为您提供所需的结果。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.