繁体   English   中英

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

[英]Is there a way to transform XML into XSL using XSL?

所以我的问题是我有一堆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中。

删除属性

只需复制除默认属性之外的所有内容

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM