跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

C#怎么处理XML声明

XML声明是特殊处理指令而非元素,C#中需用XmlDeclaration或XDeclaration专用API处理,不可手动拼接;读取时位于文档开头,保存时可配置OmitXmlDeclaration控制输出。 在 C# 中,XML 声明(如
)是 XML 文档的可选开头部分,它**不是 XML 元素**,而是处理指令(Processing Instruction, PI),且有特殊语义。C# 的 XML 类库(
System.Xml
)会将其作为
XmlDeclaration
节点处理,而不是普通元素或文本。 读取时:XmlDocument 或 XDocument 会自动识别并保留声明 使用
XmlDocument
加载 XML 字符串或文件时,如果源中包含合法的 XML 声明,它会被解析为
XmlDeclaration
节点,并作为文档的第一个子节点(位于
DocumentElement
之前)。
XmlDocument.FirstChild
可能是
XmlDeclaration
(类型为
XmlDeclaration
),需用
is
或
GetType()
判断
XDocument.Declaration
是专门属性,直接返回
XDeclaration
对象(含
Version
、
Encoding
、
Standalone
) 若原始 XML 没有声明,
XDocument.Declaration
为
null
;
XmlDocument
则无对应节点 创建/修改声明:通过 XDocument 或 XmlDocument 显式设置 不能靠“添加元素”方式插入声明——必须用专用 API。 XDocument :构造时传入
XDeclaration
,或用
Document.Declaration = new XDeclaration(...)
XmlDocument :调用
CreateXmlDeclaration()
创建节点,再用
PrependChild()
插入到文档开头(注意:必须在
DocumentElement
之前,且只能有一个) 修改已有声明:对
XDocument
直接赋值
Declaration
;对
XmlDocument
需先移除旧声明再插入新声明 保存时:默认会输出声明,但可控制 调用
Save()
或
ToString()
时,默认包含声明(只要
Declaration
不为 null 或文档有
XmlDeclaration
节点)。 C知道 CSDN推出的一款AI技术问答工具 下载 想省略声明?对
XDocument
:设
doc.Declaration = null
再保存 对
XmlDocument
:调用
RemoveChild()
移除第一个
XmlDeclaration
节点(需先判断类型) 用
XmlWriterSettings.OmitXmlDeclaration = true
可强制不写声明(即使文档有声明) 常见误区提醒 XML 声明必须是文档第一项(前面不能有空白或注释),否则解析会失败。C# 的
Load()
方法遇到非法位置的声明会抛
XmlException
。 不要手动拼接
""
字符串插入到 XML 中——这会产生文本节点,不是有效声明
InnerText
或
InnerXml
不包含声明内容,它不属于“内部”结构 序列化对象(如
XmlSerializer
)默认生成带声明的 XML,如需定制,用
XmlWriter
并配置
XmlWriterSettings
基本上就这些。关键记住:它是特殊节点,走专用路径处理,别当普通元素对待。

相关文章