我从第三方接收符合NIEM标准的XML。我需要将其翻译成平面文本文件以供其他应用程序使用。我在另一个项目中使用XSLT之前已经完成了这个,但没有那么多名称空间。我收到的XML文档包含5个名称空间,每个元素都单独加上必需的名称空间。我很难弄清楚如何使用所有不同的命名空间来访问数据。任何帮助我入门的人都将不胜感激。
部分XML文件示例
<?xml version="1.0" encoding="UTF-8"?>
<asap:ReportTransmission xmlns:asap="http://www.asapnet.org/pmp/4.2/exchange"
xmlns:asap-code="http://www.asapnet.org/pmp/4.2/extension/code"
xmlns:asap-ext="http://www.asapnet.org/pmp/4.2/extension"
xmlns:asap-meta="http://www.asapnet.org/pmp/4.2/extension/meta"
xmlns:nc="http://release.niem.gov/niem/niem-core/3.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.asapnet.org/pmp/4.2/exchange ../schemas/exchange/pmp_exchange.xsd">
<asap-meta:TransactionHeader>
<asap-meta:ReleaseNumberText>4.2</asap-meta:ReleaseNumberText>
<asap-meta:ControlNumberText>857463</asap-meta:ControlNumberText>
<asap-code:TransactionKindCode>01</asap-code:TransactionKindCode>
<asap-meta:TransactionDate>2009-10-15</asap-meta:TransactionDate>
<asap-meta:TransactionTime>10:45:00</asap-meta:TransactionTime>
<asap-code:FileKindCode>P</asap-code:FileKindCode>
</asap-meta:TransactionHeader>
... continues
</asap:ReportTransmission>
我在MSDN上根据此示例设置了样式表(&#34; XSLT和命名空间&#34;部分):https://msdn.microsoft.com/en-us/library/ms950779.aspx?f=255&MSPPError=-2147217396
此问题的已接受答案与MSDN示例非常相似,似乎确认应该如何完成:XSLT with multiple namespaces
当前样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:asap="http://www.asapnet.org/pmp/4.2/exchange"
xmlns:asap-code="http://www.asapnet.org/pmp/4.2/extension/code"
xmlns:asap-ext="http://www.asapnet.org/pmp/4.2/extension"
xmlns:asap-meta="http://www.asapnet.org/pmp/4.2/extension/meta"
xmlns:nc="http://release.niem.gov/niem/niem-core/3.0/"
exclude-result-prefixes="asap asap-code asap-ext asap-meta nc">
<xsl:output method="text" omit-xml-declaration="yes" indent="no" />
<xsl:template match="asap:ReportTransmission">
<xsl:apply-templates select="asap-meta:TransactionHeader"/>
</xsl:template>
<xsl:template match="asap-meta:TransactionHeader">
<xsl:value-of select="asap-meta:ReleaseNumberText"/>
<xsl:value-of select="ReleaseNumberText"/>
</xsl:template>
</xsl:stylesheet>
我根本没有得到转换结果,因此源XML会被回复。
匹配和选择具有如此多命名空间的数据的正确方法是什么?