我有以下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>
感谢。
答案 0 :(得分:1)
在样式表中,向xmlns:fatcav1="urn:oecd:ties:fatca:v1"
元素添加xsl:stylesheet
属性,这意味着您声明对fatcav1
前缀的任何引用都意味着您使用URI {{引用命名空间1}}。现在,对于所有您在XSLT中生成的元素,在其前面添加urn:oecd:ties:fatca:v1
(例如fatcav1
),这意味着您正在创建<fatcav1:FATCA_OECD ...
元素< em>在与FATCA_OECD
前缀关联的命名空间中。确保将此前缀添加到所有元素。
还有其他方法可以实现相同的目标,但这是一种很好的方法,可以让任何查看XSLT代码的人明白您正在从该特定命名空间创建XML元素。
您可以选择任何您喜欢的前缀(例如您在示例中使用的fatcav1
)。真正重要的是名称空间URI和元素名称。我通常会尝试使前缀有点“说”,这样读者就可以更好地弄清楚命名空间的含义。