我有一個簡單的問題,在我的XML文件中,我有我的祖先節點上的參數,當我嘗試迭代,然後從我的xslt文件,它不起作用。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>
當我運行這個例子,我沒有得到任何結果。
在我的測試中,我發現問題(我猜)與祖先標籤內的參數有關。如果我刪除屬性的xmlns標記,來自nfeProc和非正規教育的標籤,我得到的結果如預期(我CNPJ值)
xmlns="http:/www.portalfiscal.inf.br/nfe"
有人知道如何處理這個問題?問題是什麼,以及如何解決?
因爲我無法更改XML結構,因爲它來自政府。
編輯
作爲回答了同伴,這些問題是關係到命名空間。我會繼續搜索,並已做了一些修改,把命名空間在我的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">
,但繼續不工作,我沒有按不會返回任何錯誤,但不起作用。
在此先感謝。
的默認命名經典問題。搜索術語並嘗試解決方案。 – Parfait
你是對的,因爲我沒有方向,我不知道什麼搜索。我在想,xmlns只是標籤中的簡單參數。我會看看。 –
您錯過了命名空間中的'/'。它應該是'http:// www.portalfiscal.inf.br/nfe'而不是'http:/ www.portalfiscal.inf.br/nfe'。另外,你需要在xpath't:nfeProc/t:NFe/t:infNFe/t:emit'中的所有元素前面使用't:'前綴,因爲默認命名空間是繼承的(即,需要在XML中的所有元素上使用'xmlns =「...」',除非兒童名稱空間不同) –