【问题标题】:xsl copy of subelement section using xslt使用 xslt 的子元素部分的 xsl 副本
【发布时间】:2020-09-12 04:19:28
【问题描述】:

我正在尝试使用 XSLT 来实现以下目标;只保留第一个标题,然后保留所有“详细信息”元素 - “订单”下的所有内容。我尝试了几种 xsl 副本的混合;我尝试过的也粘贴在下面。

输入:

<Root>
<Order>
    <Header>
        <H1>abc</H1>
        <H2>123</H2>
    </Header>
    <Details>
        <Detail>
            <val1>test1</val1>
            <OrderId>111</OrderId>
        </Detail>
        <Detail>
            <val1>test2</val1>
            <OrderId>112</OrderId>
        </Detail>
    </Details>
</Order>
<Order>
    <Header>
        <H1>abc</H1>
        <H2>123</H2>
    </Header>
    <Details>
        <Detail>
            <val1>test3</val1>
            <OrderId>113</OrderId>
        </Detail>
        <Detail>
            <val1>test4</val1>
            <OrderId>114</OrderId>
        </Detail>
    </Details>
</Order>
</Root>

预期输出是

<Order>
<Header>
    <H1>abc</H1>
    <H2>123</H2>
</Header>
<Details>
    <Detail>
        <val1>test1</val1>
        <OrderId>111</OrderId>
    </Detail>
    <Detail>
        <val1>test2</val1>
        <OrderId>112</OrderId>
    </Detail>
    <Detail>
        <val1>test3</val1>
        <OrderId>113</OrderId>
    </Detail>
    <Detail>
        <val1>test4</val1>
        <OrderId>114</OrderId>
    </Detail>
</Details>
</Order>

我尝试过的如下。但它并没有为我提供预期的结果

<?xml version="1.0" encoding="UTF-8"?>
<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" omit-xml-declaration="no" />

<xsl:template match="*">
  <xsl:element name="{name(*[1])}">
     <xsl:copy-of select="*[1]/Header"/>
     <xsl:for-each select="*">
        <xsl:copy-of select="Detail"/>
     </xsl:for-each>
  </xsl:element>
</xsl:template>
</xsl:stylesheet>

非常感谢任何帮助

谢谢 法瑞斯

【问题讨论】:

    标签: xml xslt copy


    【解决方案1】:

    为什么不简单:

    <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:template match="/Root">
        <Order>
            <xsl:copy-of select="Order[1]/Header"/>
            <Details>
                <xsl:copy-of select="Order/Details/Detail"/>
            </Details>
        </Order>
    </xsl:template>
    
    </xsl:stylesheet>
    

    【讨论】:

    • 那是更简单的版本。 :) 谢谢,它成功了!
    猜你喜欢
    • 2011-09-30
    • 2013-06-26
    • 2016-12-07
    • 2014-08-28
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多