在节点中打印XSLT命名空间

时间:2014-07-28 21:36:44

标签: xml xslt

我不知道为什么在我的输出结果中我在节点中找到了命名空间......:

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.04 file://BE-FILE01/tverschu$/SR%20(Standards%20Release)/SR2013/ISO/Payments%20Clearing%20and%20settlement/SR2013_MX_Schemas_PaymentsClearingAndSettlement/pacs.008.001.04.xsd">
<FIToFICstmrCdtTrf>
    <test xmlns:pacs="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.04">BBBBIE2D</test>
    <CdtTrfTxInf>
        <PmtId>
            <InstrId>BBBB/121109/-CBJ056/1</InstrId>
            <EndToEndId>CROPS/SX-25T/2012-10-13</EndToEndId>
            <TxId>AAAA/121109-CCT/EUR/443/1</TxId>

我的XSLT文件:

<xsl:stylesheet 
version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:pacs="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.04"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

 <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
  </xsl:template>

 <xsl:template match="//pacs:GrpHdr[pacs:SttlmInf]">

 <test>
 <xsl:value-of select="pacs:InstgAgt/pacs:FinInstnId/pacs:BICFI[text()]" />
 </test>
  </xsl:template>
</xsl:stylesheet>

我的输入文件:

    <?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.04 file://BE-FILE01/tverschu$/SR%20(Standards%20Release)/SR2013/ISO/Payments%20Clearing%20and%20settlement/SR2013_MX_Schemas_PaymentsClearingAndSettlement/pacs.008.001.04.xsd">
    <FIToFICstmrCdtTrf>
        <GrpHdr>
            <MsgId>BBBB/121109-CBJO56</MsgId>
            <CreDtTm>2012-11-09T10:13:00</CreDtTm>
            <NbOfTxs>1</NbOfTxs>
            <SttlmInf>
                <SttlmMtd>CLRG</SttlmMtd>
                <ClrSys>
                    <Prtry>CBJ</Prtry>
                </ClrSys>
            </SttlmInf>
            <InstgAgt>
                <FinInstnId>
                    <BICFI>BBBBIE2D</BICFI>
                </FinInstnId>
            </InstgAgt>
            <InstdAgt>
                <FinInstnId>
                    <BICFI>CCCCIE2D</BICFI>
                </FinInstnId>
            </InstdAgt>
        </GrpHdr>

1 个答案:

答案 0 :(得分:1)

您正在使用基于身份样式表的样式表。节点的默认处理是将它们复制到输出文档。命名空间声明就像任何其他节点一样;如果你不说要用它做其他事情,它就会被复制。 (如果复制需要该前缀的节点来表达其语义,也可以自动复制/重新创建。)

您可以使用XSLT的exclude-result-prefixes功能来有选择地抑制从未引用的名称空间声明......但要小心;如果在字符串中使用前缀(例如在XPath中),则可能会破坏文档。