【发布时间】:2016-01-13 18:37:32
【问题描述】:
我有以下 XML 文件,我将转换为另一个 XML 文件:
<Report>
<MessageDetails>
<MessageGeneratedOn>2016-01-13T17:56:22</MessageGeneratedOn>
<ReportingPeriod>2016-12-31</ReportingPeriod>
</MessageDetails>
<Reporting1>
<OrganizationName>API Guernsey Limited</OrganizationName>
<DistrictName>Windsor</DistrictName>
<City>Corres</City>
</Reporting1>
</Report>
我应用以下 XSLT 进行转换:
<?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"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Report">
<FATCA_OECD version="1.1" schemaLocation="urn:oecd:ties:fatca:v1 FatcaXML_v1.1.xsd" >
<xsl:element name ="ReportingPeriod">
<xsl:value-of select="MessageDetails/ReportingPeriod"/>
</xsl:element>
<xsl:element name ="Timestamp">
<xsl:value-of select="MessageDetails/MessageGeneratedOn"/>
</xsl:element>
<Reporting1>
<xsl:element name ="Name">
<xsl:value-of select="ReportingFI/Name"/>
</xsl:element>
<Address>
<xsl:element name ="DistrictName">
<xsl:value-of select="ReportingFI/Address2"/>
</xsl:element>
<xsl:element name ="City">
<xsl:value-of select="ReportingFI/City"/>
</xsl:element>
</Address>
</Reporting1>
</FATCA_OECD>
</xsl:template>
</xsl:stylesheet>
这将创建以下 XML:
<FATCA_OECD version="1.1" schemaLocation="urn:oecd:ties:fatca:v1 FatcaXML_v1.1.xsd">
<MessageSpec>
<ReportingPeriod>2016-12-31</ReportingPeriod>
<XMLTimeStamp>2016-01-13T17:56:22</XMLTimeStamp>
</MessageSpec>
<FATCA>
<Reporting1>
<Address>
<DistrictName></DistrictName>
<City>Corres</City>
</Address>
</Reporting1>
<ReportingGroup />
</FATCA>
</FATCA_OECD>
但我需要带有命名空间的 XML。如何创建带有如下命名空间的 XML?:
<ftc:FATCA_OECD version="1.1" schemaLocation="urn:oecd:ties:fatca:v1 FatcaXML_v1.1.xsd">
<ftc:MessageSpec>
<sfa:ReportingPeriod>2016-12-31</sfa:ReportingPeriod>
<sfa:XMLTimeStamp>2016-01-13T17:56:22</sfa:XMLTimeStamp>
</ftc:MessageSpec>
<ftc:FATCA>
<ftc:Reporting1>
<sfa:Address>
<sfa:DistrictName></sfa:DistrictName>
<sfa:City>Corres</sfa:City>
</sfa:Address>
</Reporting1>
<ftc:ReportingGroup />
</ftc:FATCA>
</ftc:FATCA_OECD>
谢谢。
【问题讨论】:
-
您的预期输出是仍然没有命名空间的文档,它只有前缀名称,但缺少命名空间声明。
-
澄清一下:您的预期输出不是格式良好的 XML,并且不能作为 XSL 转换的结果生成。如果不将前缀绑定到命名空间 (URL),则无法使用前缀。