xinclude 是 w3c 标准定义的 xml 内容内联包含机制,需显式声明命名空间并由支持处理器展开,工作在信息项层面,保留命名空间、属性等结构,支持 parse=”xml”/”text” 和 fallback 错误处理。
什么是 XInclude?它和普通 XML 包含有什么区别
XInclude 是 W3C 标准定义的一种机制,用于在 XML 文档中“引用并内联插入”其他 XML 文档的内容。它不是 XML 解析器默认启用的功能,而是需要显式声明命名空间并由支持 XInclude 的处理器(如 libxml2、lxml、Java Transformer 或 xmllint --xinclude)主动展开。
它和简单的文本包含(比如预处理器 #include)或 DTD 实体不同:XInclude 工作在解析后的信息项层面,能保留被包含文档的命名空间、属性、注释等结构信息,且支持错误处理策略(fallback)。
如何在 XML 中写一个基本的 XInclude 引用
必须满足三个前提:声明 XInclude 命名空间、使用 xi:include 元素、确保处理器启用 XInclude 支持。常见错误是只写了标签却没声明命名空间,导致解析失败或静默忽略。
-
xmlns:xi="http://www.w3.org/2001/XInclude"必须出现在根元素或xi:include父元素上 -
href属性值是相对或绝对 URI,不支持本地文件路径裸写(如config.xml可以,C:\data\config.xml在多数实现中会失败) - 被包含文件必须是格式良好的 XML,不能是 HTML 或片段(除非用
parse="text")
<?xml version="1.0"?> <root xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="header.xml"/> <body>Main content</body> <xi:include href="footer.xml"/> </root>
parse=”text” 和 parse=”xml” 的实际影响
parse 属性决定如何解释被包含资源的内容类型,直接影响解析行为和错误边界: