XML 配置继承,避免重复

  • 本文关键字:配置 继承 XML xml maven ant
  • 更新时间 :
  • 英文 :


想象一下,当你有大约 10+ 个几乎相同的多个环境的大型 XML 配置文件时。

有时您必须添加一个新选项,这会导致使用相同的数据修改所有这些 10..20..30+ 文件。

你犯错误。与其他分支合并时会出现冲突。你变得紧张和沮丧。

有没有好的工具可以为纯XML文件(不是Spring.cgf或POM(提供继承之类的东西?

或者我必须自己写一个蚂蚁或 maven 自行车脚本?

您可以使用实体/实体引用在文件内或跨文件的多个位置引用和重用内容。

声明和使用实体的 XML 文件如下所示:

<!DOCTYPE doc [
  <!ENTITY myent "<x>Text content of myent</x>">
]>
<doc>
  &myent;
  &myent;
</doc>

此 XML 文件的处理方式就好像

<doc>
  <x>Text content of myent</x>
  <x>Text content of myent</x>
</doc>

已指定。也就是说,实体引用&myent;替换为其替换文本<x>Text content of myent</x>

这也适用于存储在外部文件(称为外部实体(中的替换文本。假设上面的文件存储为 doc.xml ,您可以从另一个 XML 文件中引用它,如下所示:

<!DOCTYPE otherdoc [
  <!ENTITY doc SYSTEM "doc.xml">
]>
<otherdoc>
  &doc;
</otherdoc>

XML 解析器会将其视为

<otherdoc>
  <doc>
    <x>Text content of myent</x>
    <x>Text content of myent</x>
  </doc>
</otherdoc>

已指定。

使用实体,您可以组织公共 XML 内容,而不会在文件内或文件之间产生冗余。希望有帮助。

编辑:请注意,您必须调整 DOCTYPE - 它必须与 XML 的文档元素匹配

您可以维护一个生成多个配置文件的 XSLT 脚本,如下所示:

<xsl:transform version='3.0' expand-text='true'....>
<xsl:variable name="outputs" as="element(output)*">
  <output file="config1.xml" os="mac" db="oracle"/>
  <output file="config2.xml" os="windows" db="mysql"/>
</xsl:variable>
<xsl:template name="main">
  <xsl:for-each select="$outputs">
    <xsl:result-document href="{$file}">
      <config>
        <aspiration>high</aspiration>
        <perspiration>low</perspiration>
        <condensation>{if (@db='oracle') then 'moderate' else 'none'}</condensation>
        <xsl:if test="@os='linux'>
          <permutation>inverse</permutation>
        </xsl:if>
     </config>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>
</xsl:transform>

然后,当有更改时,只需编辑样式表并重新运行它。

或者,您可以使用条件标记创建配置文件,如下所示:

<config>
  <perspiration>high</perspiration>
  <exhumation for-os="linux">mediocre</exhumation>
  <exhumation for-os="windows">none</exhumation>
  ...
</config>

然后编写样式表,通过删除不适用的元素来对其进行子集化。

相关内容

  • 没有找到相关文章

最新更新