【问题标题】:Is there a way to transform XML into XSL using XSL?有没有办法使用 XSL 将 XML 转换为 XSL?
【发布时间】:2017-06-21 16:06:47
【问题描述】:

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

【问题讨论】:

  • XSLT 是 XML,因此 XSLT 可以创建 XSLT 作为其结果,通常使用 w3.org/TR/xslt20/#element-namespace-alias 完成。您需要展示您心目中的 XML 和 XSLT 示例,以便我们判断这是否必要,您不能简单地使用参数。
  • 对不起,我不明白你的问题。是否要将 test.xml 转换为 test.xsl,然后再将其用于其他转换? (确实可能)。或者您是否想要一个能够从 100 个 xml 文件中删除“默认值”的单一 xsl 工作表? (这取决于你的 100 个 xml 文件的结构)
  • @MartinHonnen 进行了更改。希望这能解释得更多。
  • @nCessity 我现在正在查看任一选项,我通常会删除默认值,但需要保留顺序,这可能会出现问题。希望我所做的编辑能更好地解释我的问题。
  • 请同时添加您想要的输出xml,谢谢!

标签: xml xslt


【解决方案1】:

删除属性

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

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

【讨论】:

  • 嘿伙计,我非常感谢您的回答,但我搞砸了我希望完成默认设置的顺序。已添加未删除,抱歉造成混乱,在办公室度过了一个漫长的早晨。
  • @AAlred:我反过来添加了。希望有帮助!
  • 它看起来有效!这也能保持秩序吗?它适用于我的示例,但我想知道它是否在任何情况下都有效
  • 是的,它确实保留了顺序。
猜你喜欢
  • 2012-02-01
  • 2019-03-22
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2012-08-12
  • 2016-02-13
相关资源
最近更新 更多