& 在 XElement 中
& in XElement
我想使用 System.Xml.Linq.XElement
生成 <element>&</element>
。
我试过这个:new XElement("element", "&")
但它转义了符号并生成:<element>&amp;</element>
我能想到的唯一解决方法是创建一个继承自 XText
的自定义 class,覆盖 WriteTo
方法并使用 XmlWriter
=> WriteEntityRef
方法。在我看来,这有点矫枉过正。还有其他方法吗?
您已经在评论中找到了解决方案,只是一些背景知识:
你必须明白内容as is (outside the XML)和它的表示在内XML。在 XML 之外你看到的是纯内容,当它被写入 XML 时它会自动转义,在读取时它又是 re-escaped。
I tried this: new XElement("element", "&")
but it escapes the
ampersand and it generates: <element>&amp;</element>
这清楚地表明发生了什么。通过传入 &
你会得到 &amp;
。引擎看到 &
并将其替换为实体。
只需使用 new XElement("element", "&")
即可获得所需的结果。
正如评论和答案中所建议的那样,new XElement("element", "&")
实际上将利用框架正确转义 & 符号。
我遇到的部分问题是,最初我试图将
放入我的 xml 元素中,但收效甚微。我不知道除非我的 XML 有一个定义
的 DTD,否则我不能使用
。
从那时起,我更新了我的问题,改为使用 &
,这反过来又改变了 XElement
的行为,因为与 space 不同,&
需要转义XML,LINQ to XML 会自动执行此操作(如预期)。
我想使用 System.Xml.Linq.XElement
生成 <element>&</element>
。
我试过这个:new XElement("element", "&")
但它转义了符号并生成:<element>&amp;</element>
我能想到的唯一解决方法是创建一个继承自 XText
的自定义 class,覆盖 WriteTo
方法并使用 XmlWriter
=> WriteEntityRef
方法。在我看来,这有点矫枉过正。还有其他方法吗?
您已经在评论中找到了解决方案,只是一些背景知识:
你必须明白内容as is (outside the XML)和它的表示在内XML。在 XML 之外你看到的是纯内容,当它被写入 XML 时它会自动转义,在读取时它又是 re-escaped。
I tried this:
new XElement("element", "&")
but it escapes the ampersand and it generates:<element>&amp;</element>
这清楚地表明发生了什么。通过传入 &
你会得到 &amp;
。引擎看到 &
并将其替换为实体。
只需使用 new XElement("element", "&")
即可获得所需的结果。
正如评论和答案中所建议的那样,new XElement("element", "&")
实际上将利用框架正确转义 & 符号。
我遇到的部分问题是,最初我试图将
放入我的 xml 元素中,但收效甚微。我不知道除非我的 XML 有一个定义
的 DTD,否则我不能使用
。
从那时起,我更新了我的问题,改为使用 &
,这反过来又改变了 XElement
的行为,因为与 space 不同,&
需要转义XML,LINQ to XML 会自动执行此操作(如预期)。