有没有一种方法可以使用XSL将XML转换为XSL?
所以我的问题是,我有一堆xml文件,超过100个,我想为它们编写xsl来添加它们的默认值。我想知道是否有一种方法可以编写一个xsl,将所有这些xml转换成xsl格式。目前我唯一能想到的另一种方法是用手,所以我想在我开始走那条长长的路之前,我会问一下 以下是我的一个XML的摘录:有没有一种方法可以使用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
<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:我是以相反的方式添加的。”。希望有帮助!它看起来很管用!这也能维持秩序吗?我的例子是这样的,但我想知道它在任何情况下是否有效是的,它确实保持了秩序。