Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保持XML干燥而不改变模式_Xml_Dry_Jscript - Fatal编程技术网

保持XML干燥而不改变模式

保持XML干燥而不改变模式,xml,dry,jscript,Xml,Dry,Jscript,我们使用的是第三方XML模式,用于根据表单和表单上的选项卡对GUI布局进行编码。这是由第三方应用程序读取的,对此我们几乎没有控制权(也就是说没有控制权)。我们还获得了一个有限的MSJScript接口来处理按键事件,因此可以公平地猜测第三方应用程序也是某种JScript引擎 我们正在修改GUI布局,以便在某些表单中添加一组选项卡。修改后的xml如下所示: <forms> <form name="form1"> <tab name="3rd party ta

我们使用的是第三方XML模式,用于根据表单和表单上的选项卡对GUI布局进行编码。这是由第三方应用程序读取的,对此我们几乎没有控制权(也就是说没有控制权)。我们还获得了一个有限的MSJScript接口来处理按键事件,因此可以公平地猜测第三方应用程序也是某种JScript引擎

我们正在修改GUI布局,以便在某些表单中添加一组选项卡。修改后的xml如下所示:

<forms>
  <form name="form1">
    <tab name="3rd party tab A">
      ...
    </tab>
    <tab name="Our standard tab">
      ...
    </tab>
  </form>
  <form name="form2">
    <tab name="3rd party tab B">
      ...
    </tab>
    <tab name="Our standard tab">
      ...
    </tab>
  </form>
</forms>

...
...
...
...
有没有办法引用重复的“我们的标准标签”来保持干燥?以下几点是理想的:

<forms>
  <form name="form1">
    <tab name="3rd party tab A">
      ...
    </tab>
    <tab name="Our standard tab">
      ...
    </tab>
  </form>
  <form name="form2">
    <tab name="3rd party tab B">
      ...
    </tab>
    <?!@reference="/forms/form[@name='form1']/tab[@name='Our standard tab']">
  </form>
</forms>

...
...
...
您可以使用:
创建一个文件,std tab.xml:

<tab name="Our standard tab">
  ...
</tab>
<?xml version="1.0" ?>
<!DOCTYPE forms [
<!ENTITY std-tab SYSTEM "std-tab.xml">
]>
<forms>
  <form name="form1">
    <tab name="3rd party tab A">
      ...
    </tab>
    &std-tab;
  </form>
  <form name="form2">
    <tab name="3rd party tab B">
      ...
    </tab>
    &std-tab;
  </form>
</forms>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <forms>
      <form name="form1">
        <tab name="3rd party tab A">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
      <form name="form2">
        <tab name="3rd party tab B">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
    </forms>
  </xsl:template>

  <xsl:template name="std-tab">
    <tab name="Our standard tab">
      ...
    </tab>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<forms>
   <form name="form1">
      <tab name="3rd party tab A">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
   <form name="form2">
      <tab name="3rd party tab B">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
</forms>

...
通过在需要的地方包含XML来保持XML的干燥:

<tab name="Our standard tab">
  ...
</tab>
<?xml version="1.0" ?>
<!DOCTYPE forms [
<!ENTITY std-tab SYSTEM "std-tab.xml">
]>
<forms>
  <form name="form1">
    <tab name="3rd party tab A">
      ...
    </tab>
    &std-tab;
  </form>
  <form name="form2">
    <tab name="3rd party tab B">
      ...
    </tab>
    &std-tab;
  </form>
</forms>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <forms>
      <form name="form1">
        <tab name="3rd party tab A">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
      <form name="form2">
        <tab name="3rd party tab B">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
    </forms>
  </xsl:template>

  <xsl:template name="std-tab">
    <tab name="Our standard tab">
      ...
    </tab>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<forms>
   <form name="form1">
      <tab name="3rd party tab A">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
   <form name="form2">
      <tab name="3rd party tab B">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
</forms>

...
&标准标签;
...
&标准标签;
注意:此方法将在不向工具链添加任何工具的情况下工作;外部实体将与兼容的XML解析器一起工作。另一方面,XSLT需要另一种工具,但提供了更灵活的处理选项。

您可以使用: 此XSLT:

<tab name="Our standard tab">
  ...
</tab>
<?xml version="1.0" ?>
<!DOCTYPE forms [
<!ENTITY std-tab SYSTEM "std-tab.xml">
]>
<forms>
  <form name="form1">
    <tab name="3rd party tab A">
      ...
    </tab>
    &std-tab;
  </form>
  <form name="form2">
    <tab name="3rd party tab B">
      ...
    </tab>
    &std-tab;
  </form>
</forms>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <forms>
      <form name="form1">
        <tab name="3rd party tab A">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
      <form name="form2">
        <tab name="3rd party tab B">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
    </forms>
  </xsl:template>

  <xsl:template name="std-tab">
    <tab name="Our standard tab">
      ...
    </tab>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<forms>
   <form name="form1">
      <tab name="3rd party tab A">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
   <form name="form2">
      <tab name="3rd party tab B">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
</forms>

...
...
...
对任何XML文件运行(
就可以了)将生成XML的湿版本:

<tab name="Our standard tab">
  ...
</tab>
<?xml version="1.0" ?>
<!DOCTYPE forms [
<!ENTITY std-tab SYSTEM "std-tab.xml">
]>
<forms>
  <form name="form1">
    <tab name="3rd party tab A">
      ...
    </tab>
    &std-tab;
  </form>
  <form name="form2">
    <tab name="3rd party tab B">
      ...
    </tab>
    &std-tab;
  </form>
</forms>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <forms>
      <form name="form1">
        <tab name="3rd party tab A">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
      <form name="form2">
        <tab name="3rd party tab B">
          ...
        </tab>
        <xsl:call-template name="std-tab"/>
      </form>
    </forms>
  </xsl:template>

  <xsl:template name="std-tab">
    <tab name="Our standard tab">
      ...
    </tab>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<forms>
   <form name="form1">
      <tab name="3rd party tab A">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
   <form name="form2">
      <tab name="3rd party tab B">
          ...
        </tab>
      <tab name="Our standard tab">
      ...
    </tab>
   </form>
</forms>

...
...
...
...

注意:与外部实体方法相比,使用此方法可以利用更多的力量。您可以进一步抽象表单定义,并从中实际提取参数和结构,而不是使用伪输入XML文件。然而,XSLT方法确实需要另一个工具,而这个工具可能还不在您的工具链中;外部实体将与兼容的XML解析器一起工作。

最初打算使用另一个答案(另一个更简单),但看起来它们没有使用兼容的解析器:(你说得对,这将更加强大!