2011-06-22 42 views
1

我想加載一個XML文件,但我得到以下錯誤,我使用加載('');或loadXML();我猜這個錯誤不在負載之中,但我想不出是什麼情況。我在這裏錯過了什麼?使用DOM加載和loadXML的錯誤

的XSLT

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    version="1.0"> 

    <xsl:template match="files"> 
     <xsl:variable name="docs"> 
      <docs> 
       <xsl:for-each select="file"> 
        <xsl:copy-of select="document(.)"/> 
       </xsl:for-each> 
      </docs> 
     </xsl:variable> 

     <xsl:apply-templates select="msxsl:node-set($docs)"/> 
    </xsl:template> 

<xsl:template match="node() | @*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node() | @*" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="item"> 
    <product> 
    <xsl:apply-templates select="node() | @*" /> 
    </product> 
</xsl:template> 


</xsl:stylesheet> 
+0

我覺得你在這裏混了兩兩件事:你的國家爲'load'的錯誤顯然是一個'loadXml'錯誤,這是可以理解爲'loadXml'預計XML作爲一個字符串,如果你在這裏放置一個文件路徑,你會得到這個錯誤。第二個看起來像一切工作(加載),但你的xslt文件中有錯誤。 (請發佈xslt文件) – Yoshi

+0

@Yoshi @Gordon我用XSLT更新了這個問題。 – EnexoOnoma

+0

它可能只是我,但不應該'$ xslt = new DomDocument;''xslt = new DomDocument();'? – Nanne

回答

1

我的評論(現已刪除)摘要:

雖然我沒有看到你的示例代碼的任何loadXML,第一個錯誤信息告訴你試圖將XML由於它所說的負載是畸形的。像Yoshi指出的那樣,當loadXML需要XML字符串時,您可能會嘗試加載URI。

第二個錯誤消息意味着您在XPath選擇表達式中使用未知函數。 libxml/libxslt僅支持XPath 1.0。 msxsl:node-set($docs)不是常規的xpath函數。它不支持。

嘗試不使用名稱空間,例如只是node-set。如果這不起作用,請使用根元素中的xmlns:exsl="http://exslt.org/common"替換msxsl命名空間,並使用exsl:node-set來嘗試。

另見Understanding the node-set() Function

+0

我已經使用了你建議我的命名空間,它正在工作,謝謝!所以錯誤在我的xslt中。 – EnexoOnoma