我想用<element>&</element>
生成System.Xml.Linq.XElement
。
我试过这个:new XElement("element", "&")
但它逃脱了&符号并产生:<element>&amp;</element>
我能想到的唯一解决方法是创建一个继承自XText
的自定义类,覆盖WriteTo
方法并使用XmlWriter
=> WriteEntityRef
方法。在我看来,这有点矫枉过正。还有另一种方法吗?
你已经在评论中得到了解决方案,只是一些背景知识:
您必须了解内容(XML之外)与XML中的表示之间的区别。在XML之外,您可以看到普通内容,当它被写入XML时会自动转义,在读取时会再次重新转义。
我试过这个:
new XElement("element", "&")
但它逃脱了&符号并产生:<element>&amp;</element>
这清楚地表明了发生了什么。通过传递&
你得到&amp;
。引擎看到&
并将其替换为实体。
只需使用new XElement("element", "&")
,它可以为您提供所需的结果。
正如评论和答案中所建议的那样,new XElement("element", "&")
实际上会利用框架来正确地逃避&符号。
我遇到的部分问题是,最初我试图将
放入我的xml元素中并没有太大的成功。我不知道除非我的XML有一个定义
的DTD,否则我不能使用
。
从那时起,我更新了我的问题,改为使用&
,这反过来又改变了XElement
的行为,因为与空间不同,&
需要在XML中转义,而LINQ to XML会自动执行此操作(如预期的那样)。