参数化部分 xml 属性值
paremetrize part of xml attribute value
我正在解组几个大 XML 文件。
它们有公共部分,我决定将公共部分写在单独的 XML 文件中,然后使用 xi:include
标记将其包含在内。
它看起来像这样:
<tag1>
<tag2>
</tag2>
<tag3>
</tag3>
<xi:include href = "long/common/part/of/partial/xml/file1"/>
<xi:include href = "long/common/part/of/partial/xml/file2"/>
</tag1>
此刻我想参数化long/common/part
。
我尝试使用 xsl:variable
像这样
定义一个变量
<xsl:variable name="test">
"long/common/part/of/partial/xml/"
</xsl:variable>
但是给 href 赋值是个问题,
<xi:include href = "{$test}"/>
或
<xi:include href = <xsl:value-of select="test"/>
没有用。
有没有办法给 XML 属性赋值?
您在这里混合了 XInclude、XSLT 和 ad-hoc {$var}
语法(不是 XML 的一部分)。在 XInclude 元素中 可以 参数化 href
值的方法是使用 实体引用 (XML 的和 SGML 的文本替换变量机制等):
<xi:include href="&href-value;"/>
其中 href-value
必须以编程方式绑定到字符串 long/common/part/of/partial/xml/file1
,或者(最好)通过在序言中声明它,例如:
<!DOCTYPE tag1 [
<!ENTITY href-value "long/common/part/of/partial/xml/file1">
]>
<tag1>
<xi:include href = "&href-value;"/>
</tag1>
但是,既然现在您无论如何都在使用实体引用,那么您可以只使用实体实现相同的效果,根本不需要 XInclude:
<!DOCTYPE tag1 [
<!ENTITY common-part SYSTEM "long/common/part/of/partial/xml/file1">
]>
<tag1>
&common-part;
</tag1>
这将 long/common/part/of/partial/xml/file1 的 content 拉入 common-part
实体,然后在内容中引用该值,XML 解析器处理文档就好像 common-part
的替换值(例如 long/common/part/of/partial/xml/file1
中存储的任何内容)已直接在文档中指定。
希望这不会太混乱; XML 和 SGML 中的实体是如何工作的一般解释
我正在解组几个大 XML 文件。
它们有公共部分,我决定将公共部分写在单独的 XML 文件中,然后使用 xi:include
标记将其包含在内。
它看起来像这样:
<tag1>
<tag2>
</tag2>
<tag3>
</tag3>
<xi:include href = "long/common/part/of/partial/xml/file1"/>
<xi:include href = "long/common/part/of/partial/xml/file2"/>
</tag1>
此刻我想参数化long/common/part
。
我尝试使用 xsl:variable
像这样
<xsl:variable name="test">
"long/common/part/of/partial/xml/"
</xsl:variable>
但是给 href 赋值是个问题,
<xi:include href = "{$test}"/>
或
<xi:include href = <xsl:value-of select="test"/>
没有用。 有没有办法给 XML 属性赋值?
您在这里混合了 XInclude、XSLT 和 ad-hoc {$var}
语法(不是 XML 的一部分)。在 XInclude 元素中 可以 参数化 href
值的方法是使用 实体引用 (XML 的和 SGML 的文本替换变量机制等):
<xi:include href="&href-value;"/>
其中 href-value
必须以编程方式绑定到字符串 long/common/part/of/partial/xml/file1
,或者(最好)通过在序言中声明它,例如:
<!DOCTYPE tag1 [
<!ENTITY href-value "long/common/part/of/partial/xml/file1">
]>
<tag1>
<xi:include href = "&href-value;"/>
</tag1>
但是,既然现在您无论如何都在使用实体引用,那么您可以只使用实体实现相同的效果,根本不需要 XInclude:
<!DOCTYPE tag1 [
<!ENTITY common-part SYSTEM "long/common/part/of/partial/xml/file1">
]>
<tag1>
&common-part;
</tag1>
这将 long/common/part/of/partial/xml/file1 的 content 拉入 common-part
实体,然后在内容中引用该值,XML 解析器处理文档就好像 common-part
的替换值(例如 long/common/part/of/partial/xml/file1
中存储的任何内容)已直接在文档中指定。
希望这不会太混乱; XML 和 SGML 中的实体是如何工作的一般解释