Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Xml XSLT-对节点进行分组时缺少属性_Xml_Xslt_Xslt 1.0_Transformation_Xslt Grouping - Fatal编程技术网

Xml XSLT-对节点进行分组时缺少属性

Xml XSLT-对节点进行分组时缺少属性,xml,xslt,xslt-1.0,transformation,xslt-grouping,Xml,Xslt,Xslt 1.0,Transformation,Xslt Grouping,这里是XML输入、想要的输出、我拥有的代码和我得到的错误结果的最小但完整的示例 这是我的输入XML <?xml version="1.0"?> <R> <M> <H>1</H> <B> <p Ccy="GBP">1</p> </B> </M> <M> <H>1</H> <

这里是XML输入、想要的输出、我拥有的代码和我得到的错误结果的最小但完整的示例

这是我的输入XML

<?xml version="1.0"?>
<R>
  <M>
    <H>1</H>
    <B>
        <p Ccy="GBP">1</p>
    </B>
  </M>
  <M>
    <H>1</H>
    <B>
        <p Ccy="GBP">2</p>
    </B>
  </M>
  <M>
    <H>1</H>
     <B>
        <p Ccy="GBP">3</p>
    </B>
  </M>
  <M>
    <H>1</H>
    <B>
        <p Ccy="GBP">4</p>
    </B>
  </M>
</R>

1.

1

1.

2

1.

3

1.

4

这是我当前的XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">

    <xsl:output indent="yes" />

     <xsl:template match="/*">
        <R>
            <M>
                <xsl:apply-templates select="M[1]/H | M/B" />
            </M>
        </R>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

这是我当前的输出

如果查看输出,则输出中缺少Ccy=“GBP”。请查看预期输出

<?xml version="1.0" encoding="UTF-8"?>
<R xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
   <M>
      <H>1</H>
      <B>
        <p>1</p>
      </B>
      <B>
        <p>2</p>
      </B>
      <B>
        <p>3</p>
      </B>
      <B>
        <p>4</p>
      </B>
   </M>
</R>

1.
一,

二,

三,

四,

预期产量

<?xml version="1.0" encoding="UTF-8"?>
<R xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
   <M>
      <H>1</H>
      <B>
        <p Ccy="GBP">1</p>
      </B>
      <B>
        <p Ccy="GBP">2</p>
      </B>
      <B>
        <p Ccy="GBP">3</p>
      </B>
      <B>
        <p Ccy="GBP">4</p>
      </B>
   </M>
</R>

1.

1

2

3

4

小提琴:


只需添加属性@Ccy。

只需添加属性@Ccy。

如果要复制所有属性,只需扩展应用模板以处理它们,并设置复制它们的模板:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">

    <xsl:output indent="yes" />

     <xsl:template match="/*">
        <R>
            <M>
                <xsl:apply-templates select="M[1]/H | M/B" />
            </M>
        </R>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="@*">
        <xsl:copy/>
    </xsl:template>

</xsl:stylesheet>


如果要复制所有属性,只需扩展应用模板以处理它们,并设置一个复制它们的模板:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">

    <xsl:output indent="yes" />

     <xsl:template match="/*">
        <R>
            <M>
                <xsl:apply-templates select="M[1]/H | M/B" />
            </M>
        </R>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="@*">
        <xsl:copy/>
    </xsl:template>

</xsl:stylesheet>


这里的关键点是,没有选择属性的
将模板应用于子节点,而不是属性。这里的关键点是没有选择属性的
将模板应用于子节点,而不是属性。