Xml XSLT-对节点进行分组时缺少属性
这里是XML输入、想要的输出、我拥有的代码和我得到的错误结果的最小但完整的示例 这是我的输入XMLXml 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 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>
这里的关键点是,没有选择属性的
将模板应用于子节点,而不是属性。这里的关键点是没有选择属性的
将模板应用于子节点,而不是属性。