Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xslt复制元素和排序_Xslt_Sorting_Copy_Element - Fatal编程技术网

xslt复制元素和排序

xslt复制元素和排序,xslt,sorting,copy,element,Xslt,Sorting,Copy,Element,可能重复: 我有一些xml: <?xml version="1.0" encoding="utf-8"?> <fruit namespace="basket"> <apple> <type>cox</type> <size>medium</size> </apple> <orange> <type>valencia</t

可能重复:

我有一些xml:

 <?xml version="1.0" encoding="utf-8"?>
<fruit namespace="basket">  
  <apple>
    <type>cox</type>
    <size>medium</size>
  </apple>  
  <orange>  
    <type>valencia</type>
    <size>large</size>
  </orange>  
</fruit>

考克斯
中等的
巴伦西亚
大的
想象有更多的水果实例,订单可以是任何东西。我想使用xslt:

  • 复制apple元素并将type元素更改为“烹饪苹果”
  • 在结果树中为下一位添加该元素
  • 按类型对所有水果进行分类,包括新添加的苹果元素
  • 我需要它看起来像

    <?xml version="1.0" encoding="utf-8"?>
    <fruit namespace="basket">  
      <apple>
        <type>cooking</type>
        <size>large</size>
      </apple>  
      <apple>
        <type>cox</type>
        <size>medium</size>
      </apple>  
      <orange>  
        <type>valencia</type>
        <size>large</size>
      </orange>  
    </fruit>
    
    
    烹饪
    大的
    考克斯
    中等的
    巴伦西亚
    大的
    

    有人能告诉我xslt对此有何要求吗?

    如果您有xslt 2.0或允许使用EXSLT,那么这就是最好的选择

    声明一个包含要添加的节点的变量,如下所示

    <xsl:variable name="fruit">
      <apple>
        <type>cooking</type>
        <size>large</size>
      </apple>
    </xsl:variable>
    
    <xsl:template match="/*">
      <xsl:copy>
        <xsl:copy-of select="@*" />
        <xsl:for-each select="*|exslt:node-set($fruit)">
          <xsl:sort select="type" />
          <xsl:copy-of select="current()" />        
        </xsl:for-each>
      </xsl:copy>
    </xsl:template>
    

    如果您使用的是XSLT 2.0,那么可以删除变量周围的
    exslt:node-set()
    调用。否则请记住使用
    exclude result prefixes=“exslt”
    保持输出整洁

    这是家庭作业吗?这些数据似乎并不特别商业化!谢谢你的意见。非常感谢。我只能使用XSLT1.0。。。在该版本中是否可能出现类似的情况XSLT处理器是否具有EXSLT扩展?否。我发现很难复制a类型的元素,然后使用新元素对列表进行排序。