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