使用XSLT 1.0将具有多个名称空间的XML转换为文本

时间:2015-10-09 19:52:38

标签: xml xslt-1.0

我从第三方接收符合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会被回复。

匹配和选择具有如此多命名空间的数据的正确方法是什么?

0 个答案:

没有答案