有没有办法使用XSL将XML转换为XSL?

时间:2017-06-21 16:06:47

标签: xml xslt

所以我的问题是我有一堆xml文件,超过100,我想编写xsl来添加它们的默认值。我想知道是否有办法编写一个将所有这些xml转换为xsl格式的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>

所需的XML输出是:

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

但是,知道需要保留订单,我需要手动将每个值添加到xsl中吗?我问,因为一些xmls有20-30个孩子。基本上我只想删除xml中的默认值并将它们移动到xsl中。

1 个答案:

答案 0 :(得分: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>