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