XSL无法读入带有标记“Document xmlns =”urn:iso:st“的xml

时间:2014-02-19 14:40:28

标签: xml xslt tags xslt-1.0 document

我需要帮助才能读入带有此定义的xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CstmrCdtTrfInitn>
        <GrpHdr>
            <NbOfTxs>3</NbOfTxs>

问题是,当xml具有Document xmlns时,我无法读取节点...(我测试了删除此行,我可以读取节点)

我的xsl是这样的:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="UTF-8" indent="yes" method="xml" standalone="no" omit-xml-declaration="yes"/>
       <xsl:template match='GrpHdr'>
           <NbOfTxs><xsl:value-of select="NbOfTxs"/></NbOfTxs>
       </xsl:template>
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:2)

输入XML中的元素具有默认命名空间。您还需要在XSLT样式表中声明此命名空间,并且前缀要匹配的任何输入元素。

如果您想要输出GrpHdr元素及其内容,则无需匹配NbOfTxs元素。

<强>输入

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <CstmrCdtTrfInitn>
        <GrpHdr>
            <NbOfTxs>3</NbOfTxs>
        </GrpHdr>
    </CstmrCdtTrfInitn>
</Document>

<强>样式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:nsa="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">

   <xsl:output encoding="UTF-8" indent="yes" method="xml" standalone="no" omit-xml-declaration="yes"/>

   <xsl:template match='nsa:NbOfTxs'>
      <xsl:copy>
         <xsl:value-of select="."/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

<强>输出

请注意,NbOfTxs元素在输出中仍然有其命名空间(您没有说明是否要保留它)。

<NbOfTxs xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">3</NbOfTxs>

答案 1 :(得分:0)

在XSLT中声明名称空间的名称空间前缀,然后选择使用该前缀: 在这里看到类似的问题

How to 'select' from XML with namespaces?