Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
有没有一种方法可以使用XSL将XML转换为XSL?_Xml_Xslt - Fatal编程技术网

有没有一种方法可以使用XSL将XML转换为XSL?

有没有一种方法可以使用XSL将XML转换为XSL?,xml,xslt,Xml,Xslt,所以我的问题是,我有一堆xml文件,超过100个,我想为它们编写xsl来添加它们的默认值。我想知道是否有一种方法可以编写一个xsl,将所有这些xml转换成xsl格式。目前我唯一能想到的另一种方法是用手,所以我想在我开始走那条长长的路之前,我会问一下 以下是我的一个XML的摘录: <value name="dt" field="dt"/> <value name="qdd" field="qdd"/> 这是我当前的XSL: <xsl:template match

所以我的问题是,我有一堆xml文件,超过100个,我想为它们编写xsl来添加它们的默认值。我想知道是否有一种方法可以编写一个xsl,将所有这些xml转换成xsl格式。目前我唯一能想到的另一种方法是用手,所以我想在我开始走那条长长的路之前,我会问一下

以下是我的一个XML的摘录:

<value name="dt" field="dt"/>
<value name="qdd" field="qdd"/>

这是我当前的XSL:

<xsl:template match="/../../..">
    <xsl:copy>

        <!-- copy whatever was already there -->
        <xsl:apply-templates select="@*|*"/>

        <xsl:if test="not(qdd)">
            <qdd>0</qdd>
        </xsl:if>
    </xsl:copy>
</xsl:template>

0
所需的XML输出如下:

 <value name="dt" field="dt"/>
 <value name="qdd" field="qdd" default="0"/>

但是,知道需要保持顺序,我是否需要手动将每个值添加到xsl中?我这样问是因为有些XML有20-30个孩子。基本上,我只想删除xml中的默认值并将它们移动到xsl中。

删除属性 只需复制默认属性以外的所有内容:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="value/@default" />

</xsl:stylesheet>

反过来呢 复制所有内容时,将所需属性添加到满足特定条件的元素:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="value[@name='qdd']" >
    <xsl:copy>
      <xsl:attribute name="default">0</xsl:attribute>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

0
删除属性 只需复制默认属性以外的所有内容:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="value/@default" />

</xsl:stylesheet>

反过来呢 复制所有内容时,将所需属性添加到满足特定条件的元素:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="value[@name='qdd']" >
    <xsl:copy>
      <xsl:attribute name="default">0</xsl:attribute>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

0


XSLT是XML,因此XSLT可以创建XSLT作为其结果,通常使用。您需要展示您心目中的XML和XSLT示例,以便我们判断这是否必要,并且您不能简单地使用参数。是否要将test.xml转换为test.xsl,然后将其用于其他转换?(确实可能)。或者您希望有一个能够从100个xml文件中删除“默认值”的xsl表吗?(这取决于100个xml文件的结构)@MartinHonnen进行了更改。希望这能解释得更清楚一点。@nCessity我现在正在考虑这两个选项中的任何一个,我通常只删除默认值,但需要保留排序,这可能会带来问题。希望我刚才所做的编辑能更好地解释我的问题。请同时添加所需的输出xml,谢谢!XSLT是XML,因此XSLT可以创建XSLT作为其结果,通常使用。您需要展示您心目中的XML和XSLT示例,以便我们判断这是否必要,并且您不能简单地使用参数。是否要将test.xml转换为test.xsl,然后将其用于其他转换?(确实可能)。或者您希望有一个能够从100个xml文件中删除“默认值”的xsl表吗?(这取决于100个xml文件的结构)@MartinHonnen进行了更改。希望这能解释得更清楚一点。@nCessity我现在正在考虑这两个选项中的任何一个,我通常只删除默认值,但需要保留排序,这可能会带来问题。希望我刚才所做的编辑能更好地解释我的问题。请同时添加所需的输出xml,谢谢!嘿,伙计,我真的很感激你的回答,但是我搞错了我想要默认完成的顺序。“添加而不是删除,很抱歉出现了如此多的混乱,办公室里已经过了一个漫长的上午。@AAlred:我是以相反的方式添加的。”。希望有帮助!它看起来很管用!这也能维持秩序吗?我的例子是这样的,但我想知道它在任何情况下是否有效是的,它确实保留了顺序。嘿,伙计,我真的很感谢你的回答,但我搞错了我希望默认完成的顺序。“添加而不是删除,很抱歉出现了如此多的混乱,办公室里已经过了一个漫长的上午。@AAlred:我是以相反的方式添加的。”。希望有帮助!它看起来很管用!这也能维持秩序吗?我的例子是这样的,但我想知道它在任何情况下是否有效是的,它确实保持了秩序。