gpt4 book ai didi

xml - XSLT for-each 迭代(祖先属性的问题)

转载 作者:行者123 更新时间:2023-12-04 17:02:11 26 4
gpt4 key购买 nike

我遇到了一个简单的问题,在我的 XML 文件中,我的祖先节点上有参数,当我尝试迭代时,从我的 xslt 文件中它不起作用。

例如,我的 XML 文件:

    <?xml version="1.0" encoding="utf-8"?>
<nfeProc versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe">
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe99999" versao="3.10">
<ide>
<cUF>35</cUF>
...
</ide>
<emit>
<CNPJ>01881662000180</CNPJ>
...
</emit>
</infNFe>
</NFe>
</NFeProc>

还有我的 XSLT 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CNPJs/h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Number</th>
</tr>
<xsl:for-each select="nfeProc/NFe/infNFe/emit">
<tr>
<td><xsl:value-of select="./CNPJ" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

当我运行这个例子时,我没有得到任何结果。

在我的测试中,我发现问题(我猜)与祖先标签内的参数有关。如果我从 nfeProc 和 NFe 标签中删除属性 xmlns 标签,我会得到预期的结果(我的 CNPJ 值)
xmlns="http:/www.portalfiscal.inf.br/nfe"

有人知道如何处理这个问题吗?究竟是什么问题以及如何解决它?

因为我无法更改 XML 结构,因为它来自政府。

编辑

正如研究员所回答的,问题与 namespace 有关。我将继续搜索,并且已经进行了一些更改,将命名空间放入我的 XSLT 文件中,如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http:/www.portalfiscal.inf.br/nfe">

并将我的每个更改为:
<xsl:for-each select="t:nfeProc/t:NFe/infNFe/emit">

但继续不工作,我不返回任何错误,但不工作。

提前致谢。

最佳答案

您无法删除所有 xmlns-namespace是的。

或者您可以在 xPath 中为所有继承节点使用它:

t:nfeProc/t:NFe/t:infNFe/t:emit

随着声明:
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://www.portalfiscal.inf.br/nfe">

关于xml - XSLT for-each 迭代(祖先属性的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46691026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com