我有此XML:请我将其更改为其他格式
我已经尝试过下面的xslt,但是它没有给我我希望您可以在尝试使用的xslt下方找到的输出以及我得到的输出。
<?xml version="1.0"?>
<Offering>
<!--RCCG PMS to eRemittance offering XML handshake-->
<!--PARISH & OFFERING REMITTANCE INFO-->
<INFO><REGION>R20</REGION></INFO>
<INFO><PARISH>RCCGP1321000050</PARISH></INFO>
<INFO><OPTION>WEEKLY</OPTION></INFO>
<INFO><MONTH>May</MONTH></INFO>
<INFO><YEAR>2019</YEAR></INFO>
<INFO><WEEK>WK2</WEEK></INFO>
<INFO><CURRENCY>NGN</CURRENCY></INFO>
<!--DEFAULT OFFERING-->
<DEFAULT><MinisterTithe>6870.60</MinisterTithe></DEFAULT>
<DEFAULT><GeneralTithe>7780.00</GeneralTithe></DEFAULT>
<DEFAULT><SundayLoveOffering>8860.00</SundayLoveOffering></DEFAULT>
<DEFAULT><SundaySchool>770.00</SundaySchool></DEFAULT>
<DEFAULT><HappyOffering>4440.00</HappyOffering></DEFAULT>
<DEFAULT><CRM>0.00</CRM></DEFAULT>
<DEFAULT><HF>0</HF></DEFAULT>
</Offering>
我需要将上述XML格式更改为以下格式:请提供一些帮助,不胜感激...我已经尝试过下面的xslt,但它没有提供我希望您可以在尝试使用的xslt下方找到的输出和我得到的输出。
<Offering>
<INFO>
<REGION>R20</REGION>
<PARISH>RCCGP1321000050</PARISH>
<OPTION>WEEKLY</OPTION>
<MONTH>May</MONTH>
<YEAR>2019</YEAR>
<WEEK>WK2</WEEK>
<CURRENCY>NGN</CURRENCY>
</INFO>
<DEFAULT>
<MinisterTithe>6870.60</MinisterTithe>
<GeneralTithe>7780.00</GeneralTithe>
<SundayLoveOffering>8860.00</SundayLoveOffering>
<SundaySchool>770.00</SundaySchool></DEFAULT>
<HappyOffering>4440.00</HappyOffering>
<CRM>0.00</CRM>
<HF>0</HF>
</DEFAULT>
</Offering>
我尝试使用下面的xslt,但是它没有给我我想要的东西:
PS:下面的xslt就是这样
<Offering>
<!--RCCG PMS to eRemittance offering XML handshake-->
<!--PARISH & OFFERING REMITTANCE INFO-->
<REGION>R12</REGION>
<PARISH>RCCGP1261000047</PARISH>
<OPTION>WEEKLY</OPTION>
<MONTH>Jun</MONTH>
<YEAR>2019</YEAR>
<WEEK>WK1</WEEK>
<CURRENCY/>
<!--DEFAULT OFFERING-->
<MinisterTithe>0</MinisterTithe>
<GeneralTithe>0</GeneralTithe>
<SundayLoveOffering>0</SundayLoveOffering>
<SundaySchool>0</SundaySchool>
<HappyOffering>0</HappyOffering>
<CRM>0</CRM>
<HF>0</HF>
</Offering>
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="INFO|DEFAULT">
<xsl:for-each select="node()">
<xsl:element name="{name()}"><xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
您应该真正匹配Offering
元素,并在该模板中进行分组。
假设您将永远只有INFO
和DEFAULT
元素,就可以做到这一点。...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Offering">
<xsl:copy>
<INFO>
<xsl:apply-templates select="INFO/node()" />
</INFO>
<DEFAULT>
<xsl:apply-templates select="DEFAULT/node()" />
</DEFAULT>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果要使其通用,并处理Offerings
节点下的任何元素名称,则(在XSLT 1.0中)可以使用称为Muenchian Grouping的技术。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:key name="Offerings" match="Offering/*" use="local-name()" />
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Offering">
<xsl:copy>
<xsl:for-each select="*[generate-id() = generate-id(key('Offerings', local-name())[1])]">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="key('Offerings', local-name())/node()" />
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>