对 XML 属性值的一部分进行分类



我正在解组几个大的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 和临时{$var}语法(不是 XML 的一部分)。要参数化 XInclude 元素中的href值,您可以做的是使用实体引用(XML 和 SGML 的文本替换变量机制等):

<xi:include href="&href-value;"/>

其中href-value必须以编程方式绑定到字符串long/common/part/of/partial/xml/file1,或者(最好)通过在 prolog 中声明它,例如:

<!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 的内容拉入common-part实体,然后在内容中引用该值,XML 解析器将文档视为直接在文档中指定了common-part的替换值(例如存储在long/common/part/of/partial/xml/file1中的任何内容)。

希望这不会太令人困惑;在这个答案中有一个一般的解释XML和SGML中的实体是如何工作的

相关内容

  • 没有找到相关文章

最新更新