我需要帮助才能使用此定义读取 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 具有文档 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>
输入 XML 中的元素具有默认命名空间。您还需要在 XSLT 样式表中声明此命名空间,并为要匹配的任何输入元素添加前缀。
如果要输出NbOfTxs
元素及其内容,则无需匹配GrpHdr
元素。
输入
<?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>
在 XSLT 中为命名空间声明命名空间前缀,然后选择使用该前缀:在此处查看类似问题
如何从带有命名空间的XML中"选择"?