【问题标题】:XSLT - Root element not setXSLT - 未设置根元素
【发布时间】:2018-12-02 06:59:34
【问题描述】:

在我的 XSLT 上获取 Root 元素未设置错误。

XML 输入:

<?xml version="1.0" encoding="utf-8"?>
<Customer count="1">
  <Record id="123">
    <Data id="123-00">John Smith</Data>
  </Record>
   <Record id="456">
    <Data id="123-00">Mark Doe</Data>
  </Record>
 </Customer>

期望的输出:

<Customer>
    <Record>
        <Name>John Smith<Name>
    </Record>
    <Record>
        <Name>Mark Doe</Name>
    </Record>
</Customer>

到目前为止我所拥有的:

<xsl:template match="/Customer/Record">
    <xsl:for-each select="Data">
    <Customer>
        <Record>        
            <Name><xsl:value-of select="@id='123-00'"/></Name>
        </Record>
    </Customer>
    </xsl:for-each>
</xsl:template>

我尝试不使用 for 循环代码并将template match="/"value-of select="Customer/Record/Name[@id='123-00']" 一起使用,它可以工作。但我知道这不是最好的编码方式。

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    如果您想将 Data 元素转换为 Name 元素并删除任何属性,请使用

    <xsl:template match="Data">
      <Name>
        <xsl:value-of select="."/>
      </Name>
    </xsl:template>
    

    对于其他元素,您似乎想在没有属性的情况下复制它们,因此添加模板

    <xsl:template match="*">
      <xsl:copy>
        <xsl:apply-templates/>
      </xsl:copy>
    </xsl:template>
    

    满足:https://xsltfiddle.liberty-development.net/6qVRKxi

    【讨论】:

    • 当我尝试模板匹配 =“数据”时,我仍然收到根元素未设置错误。我使用了模板 match="/Customer" 然后 .
    【解决方案2】:

    要使您的代码产生您想要的输出,您需要:

    1. 使您的模板匹配Customer 而不是Record
    2. Customer 元素移出 xsl:for-each 指令;
    3. 获取Data节点的实际值(你现在只有一个布尔测试):

    <xsl:template match="/Customer">
        <Customer>
            <xsl:for-each select="Record">
                <Record>        
                    <Name>
                        <xsl:value-of select="Data[@id='123-00']"/>
                    </Name>
                </Record>
            </xsl:for-each>
        </Customer>
    </xsl:template>
    

    【讨论】:

    • 成功了!谢谢!我对从哪里开始 for 循环感到困惑。
    猜你喜欢
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多