Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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模板将xml从给定的xml输入转换为预期的xml输出_Xml_Xslt - Fatal编程技术网

xslt模板将xml从给定的xml输入转换为预期的xml输出

xslt模板将xml从给定的xml输入转换为预期的xml输出,xml,xslt,Xml,Xslt,xml输入的一部分,我需要时间来解决所需的输出 <contrib-group> <contrib contrib-type="editor"> <name> <surname>John</surname> <given-names>Cover B.</given-names> </name> <

xml输入的一部分,我需要时间来解决所需的输出

<contrib-group>
    <contrib contrib-type="editor">
        <name>
            <surname>John</surname>
            <given-names>Cover B.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1,2</sup>
        </xref>
    </contrib>
    <contrib contrib-type="author">
        <name>
            <surname>Peter</surname>
            <given-names>Crus J.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1,3</sup>
        </xref>
        <name>
            <surname>John</surname>
            <given-names>Cruz K.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1</sup>
        </xref>
    </contrib>
</contrib-group>
    <xsl:template match="contrib">    
<xsl:element name="{name()}">                         
    <xsl:for-each select="name">                
        <xsl:element name="{name(parent::*)}">
            <xsl:attribute name="contrib-type">
                <xsl:value-of select="../@contrib-type"/>
            </xsl:attribute>
            <xsl:element name="{name()}">
                <xsl:for-each select="@*">
                    <xsl:attribute name="{name()}">
                        <xsl:value-of select="."/>
                    </xsl:attribute>
                </xsl:for-each>            
            <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:for-each>
</xsl:element>    
</xsl:template>

约翰
封面B。
1,2
彼得
克鲁斯J。
1,3
约翰
克鲁兹K。
1.
xml预期输出的一部分,看起来很容易直观地捕获

<contrib-group>
    <contrib contrib-type="editor">
        <name>
            <surname>John</surname>
            <given-names>Cover B.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1,2</sup>
        </xref>
    </contrib>
    <contrib contrib-type="author">
        <name>
            <surname>Peter</surname>
            <given-names>Crus J.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1,3</sup>
        </xref>
    </contrib>
    <contrib contrib-type="author">
        <name>
            <surname>John</surname>
            <given-names>Cruz K.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1</sup>
        </xref>
    </contrib>
</contrib-group>

约翰
封面B。
1,2
彼得
克鲁斯J。
1,3
约翰
克鲁兹K。
1.
当前xslt的一部分,需要更正以解决所需的输出

<contrib-group>
    <contrib contrib-type="editor">
        <name>
            <surname>John</surname>
            <given-names>Cover B.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1,2</sup>
        </xref>
    </contrib>
    <contrib contrib-type="author">
        <name>
            <surname>Peter</surname>
            <given-names>Crus J.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1,3</sup>
        </xref>
        <name>
            <surname>John</surname>
            <given-names>Cruz K.</given-names>
        </name>
        <xref ref-type="aff" rid="aff1">
            <sup>1</sup>
        </xref>
    </contrib>
</contrib-group>
    <xsl:template match="contrib">    
<xsl:element name="{name()}">                         
    <xsl:for-each select="name">                
        <xsl:element name="{name(parent::*)}">
            <xsl:attribute name="contrib-type">
                <xsl:value-of select="../@contrib-type"/>
            </xsl:attribute>
            <xsl:element name="{name()}">
                <xsl:for-each select="@*">
                    <xsl:attribute name="{name()}">
                        <xsl:value-of select="."/>
                    </xsl:attribute>
                </xsl:for-each>            
            <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:for-each>
</xsl:element>    
</xsl:template>

很难在contrib元素中迭代child元素,而contrib元素需要复制为父标记


我更新了xslt的部分。我需要删除父contrib标记,并需要在填充的contrib中添加元素xref。

在XSLT 3中,您可以对每个组使用
,从
开始加
xsl:copy select=“…”


如果您确实在使用Saxon 8,那么它不会执行XSLT 3和
xsl:copy select
,但是每个组的
应该可以工作(假设它是一个实现XSLT 2的Saxon 8版本,我认为大多数Saxon 8版本都发生在最终XSLT 2规范的开发过程中,Saxon 8.9是第一个实现最终XSLT 2规范的版本)


对于
xsl:copy select=“…”
在XSLT 3中,您可以在XSLT 2中使用
,您需要调整
以使用

输入和输出XML之间的区别是什么?如果contrib元素中有两个name元素,则应将其拆分为两个contrib元素。我的XSLT更新您使用哪个版本的XSLT,还是您的XSLT处理r支持?使用saxon8.jar