Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
需要帮助来创建一个XSL文件,该文件将输入XML文件input.XML转换为output.XML格式_Xml_Xslt - Fatal编程技术网

需要帮助来创建一个XSL文件,该文件将输入XML文件input.XML转换为output.XML格式

需要帮助来创建一个XSL文件,该文件将输入XML文件input.XML转换为output.XML格式,xml,xslt,Xml,Xslt,我需要: 将input.xml(以下文件)转换为output.xml 创建另一个XLS,该XLS将显示每个金额:KG、PAL和M3的 总价值 将标签替换为同一XSL中的标签 第2点 创建另一个XSL,它只是为每个XSL添加一个额外的标记 并在此标签内显示装载时间(hh:MM) 但首先我需要转换这个文件(input.xml): 我尝试了这个方法,但它不完整,我不知道如何将值(如输入文件中的:PAL)转换为atributes(如输出文件中的…)。我环顾四周,尝试了一些东西,但它不起作用。有人能帮我吗

我需要:

  • input.xml
    (以下文件)转换为
    output.xml
  • 创建另一个XLS,该XLS将显示每个金额:
    KG
    PAL
    M3
    的 总价值
  • 将标签
    替换为同一XSL中的标签
    第2点
  • 创建另一个XSL,它只是为每个XSL添加一个额外的标记
    并在此标签内显示装载时间(
    hh:MM
  • 但首先我需要转换这个文件(
    input.xml
    ):

    我尝试了这个方法,但它不完整,我不知道如何将值(如输入文件中的:
    PAL
    )转换为atributes(如输出文件中的
    )。我环顾四周,尝试了一些东西,但它不起作用。有人能帮我吗。下面是我的XSLT。提前感谢。

    <?xml version="1.0" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl: template match = "/">
        <output>
                <xsl: for-each select = "orders/order[id = 1]">
                <order>
                        <xsl: value-of select = "id"/>
                        <xsl: value-of select = "number"/>
                        <xsl: value-of select = "type"/>
                </order>
                </xsl: for-each>
                <xsl: for-each select = "quantities/quantity">
                <order>
                        <xsl: value-of select = "id"/>
                        <xsl: value-of select = "number"/>
                        <xsl: value-of select = "type"/>
                </order>
                </xsl: for-each>
        </output>
    

    您需要通过匹配订单id将数量链接到各自的订单。最好的方法是使用键:

    XSLT1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:key name="qty" match="quantity" use="id_order"/>  
    
    <xsl:template match="/">
    <output>
        <orders>
            <xsl:for-each select="output/orders/order"> 
                <order>
                    <xsl:copy-of select="id|number|type"/>
                    <xsl:for-each select="key('qty', id)">
                        <xsl:element name="{unit}">
                            <xsl:value-of select="value"/>  
                        </xsl:element>
                    </xsl:for-each>
                </order>    
            </xsl:for-each>
        </orders>
    </output>
    </xsl:template>
    
    </xsl:stylesheet>
    
    
    

    请注意,我们假设每个订单的每个单元数量不超过一个(即不需要求和)。此外,在我看来,目标结构不如您开始使用的结构有用。

    您尝试过什么吗?请包含未按预期工作的XSLT。问题是什么?我只看到陈述。一些让你开始的想法:和
    <?xml version="1.0" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl: template match = "/">
        <output>
                <xsl: for-each select = "orders/order[id = 1]">
                <order>
                        <xsl: value-of select = "id"/>
                        <xsl: value-of select = "number"/>
                        <xsl: value-of select = "type"/>
                </order>
                </xsl: for-each>
                <xsl: for-each select = "quantities/quantity">
                <order>
                        <xsl: value-of select = "id"/>
                        <xsl: value-of select = "number"/>
                        <xsl: value-of select = "type"/>
                </order>
                </xsl: for-each>
        </output>
    
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:key name="qty" match="quantity" use="id_order"/>  
    
    <xsl:template match="/">
    <output>
        <orders>
            <xsl:for-each select="output/orders/order"> 
                <order>
                    <xsl:copy-of select="id|number|type"/>
                    <xsl:for-each select="key('qty', id)">
                        <xsl:element name="{unit}">
                            <xsl:value-of select="value"/>  
                        </xsl:element>
                    </xsl:for-each>
                </order>    
            </xsl:for-each>
        </orders>
    </output>
    </xsl:template>
    
    </xsl:stylesheet>