如何无需重写复用XML文件中的重复代码片段
嘿,这个需求太常见了!要在XML里避免重复编写相同的代码片段,咱们有两个实用的方案,看你的场景选就行:
方法1:使用XML实体(简单场景首选)
XML自带的自定义实体功能就能轻松解决这个问题——把重复的片段定义成一个实体,之后在需要的地方直接引用它就行,几乎所有XML解析器都支持这个特性。
举个具体的例子:
<!DOCTYPE root [ <!-- 先定义重复片段为实体,注意引号要和外部错开 --> <!ENTITY authCredentials "<argument name='user' type='text'></argument><argument name='password' type='password'></argument>"> ]> <root> <argument name="create"> <!-- 直接引用实体,自动插入重复内容 --> &authCredentials; <!-- 这里可以添加create操作独有的其他参数 --> </argument> <argument name="update"> &authCredentials; <!-- 这里可以添加update操作独有的其他参数 --> </argument> </root>
小提示:实体定义里的引号要和外部XML的引号区分开(比如外部用双引号,实体内部用单引号),不然会触发语法错误。
方法2:使用XInclude(复杂/大型项目首选)
如果你的重复片段比较复杂,或者想把它单独放在一个文件里维护(方便统一修改),那XInclude会是更灵活的选择。它允许你将外部XML文件的内容直接引入到当前文档中。
步骤很简单:
- 把重复的片段单独存成一个XML文件,比如
auth-args.xml:
<argument name="user" type="text"></argument> <argument name="password" type="password"></argument>
- 在主XML文件里通过XInclude标签引入这个文件:
<root xmlns:xi="http://www.w3.org/2001/XInclude"> <argument name="create"> <xi:include href="auth-args.xml" parse="xml"/> <!-- 这里添加create独有的参数 --> </argument> <argument name="update"> <xi:include href="auth-args.xml" parse="xml"/> <!-- 这里添加update独有的参数 --> </argument> </root>
这种方式的优势在于,你只需要修改auth-args.xml这一个文件,所有引用它的地方都会自动更新,非常适合大型项目的维护。
如果你的XML解析器对XInclude支持有限(比如一些轻量级解析器),那方法1的实体方案会更稳妥哦!
内容的提问来源于stack exchange,提问作者Jeremy Pare
相关产品推荐
相关产品推荐

