如何使用System.Xml.Linq.XElement生成<element>&</element>?
解决XElement生成
<element>&</element>的简洁方法 你遇到的问题其实是对XML实体转义的理解有点小偏差,完全不用自定义XText类这么麻烦,有几个更简单的办法:
方法一:直接传入字符&(最推荐)
XML规范里,字符&必须以&的形式呈现,而XElement会自动帮你处理转义逻辑。所以如果你想要最终生成<element>&</element>,只需要直接把字符&作为元素内容传入即可:
var element = new XElement("element", "&"); Console.WriteLine(element.ToString()); // 输出:<element>&</element>
你之前传入"&"导致输出&amp;,是因为XElement把你传入的字符串里的&再次转义了——它会把任何特殊字符都转换成对应的XML实体。
方法二:用XElement.Parse创建元素
如果你更习惯直接写XML片段,也可以用Parse方法直接构造元素:
var element = XElement.Parse("<element>&</element>"); Console.WriteLine(element.ToString()); // 同样输出:<element>&</element>
这里Parse会把&解析成字符&,后续输出时又自动转义回&,结果和方法一完全一致。
方法三:手动用XmlWriter写入(适合特殊场景)
如果你的场景需要更精细地控制XML输出(比如要写入自定义实体),可以直接用XmlWriter来写,不需要依赖XElement的自动转义:
using (var writer = XmlWriter.Create(Console.Out, new XmlWriterSettings { Indent = true })) { writer.WriteStartElement("element"); writer.WriteEntityRef("amp"); // 直接写入实体引用 writer.WriteEndElement(); } // 输出:<element>&</element>
这种方式适合你需要直接控制实体输出的特殊情况,但日常场景下方法一就足够满足需求了。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

