2017-10-11 81 views
0

我有一個簡單的問題,在我的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"> 

,但繼續不工作,我沒有按不會返回任何錯誤,但不起作用。

在此先感謝。

+0

的默認命名經典問題。搜索術語並嘗試解決方案。 – Parfait

+0

你是對的,因爲我沒有方向,我不知道什麼搜索。我在想,xmlns只是標籤中的簡單參數。我會看看。 –

+0

您錯過了命名空間中的'/'。它應該是'http:// www.portalfiscal.inf.br/nfe'而不是'http:/ www.portalfiscal.inf.br/nfe'。另外,你需要在xpath't:nfeProc/t:NFe/t:infNFe/t:emit'中的所有元素前面使用't:'前綴,因爲默認命名空間是繼承的(即,需要在XML中的所有元素上使用'xmlns =「...」',除非兒童名稱空間不同) –

回答

1

您無法刪除全部xmlns-namespace是的。

或者你可以用它在XPath所有herited節點:

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"> 
+0

謝謝!但它似乎不適合我。搜索我現在知道你的答案對我發佈的內容有意義!謝謝,我會繼續努力。 –

+0

確定編輯並檢查我的答案後解決;)thks – GGO

+0

我所錯過的是,xPath中的每個元素都需要t:前綴,正如@Tim C在上面註釋中提到的那樣。謝謝,現在正在工作。:) –