2017-07-31 77 views
0

我正在嘗試使用XSL將兩個XML文件轉換爲HTML。我有一切工作,但我有一個問題。其中一個XML文件包含我從中提取的各種信息。文件中沒有任何名稱空間聲明,但我需要訪問的節點是名稱空間的前綴。我最初的修復是將名稱空間添加到根節點,但是我發現我無法做到這一點,因爲這些文件無法修改。將XML導入到根節點上沒有名稱空間的XSL中

如果我離開的命名空間的時候,我得到了以下的Firefox:

XML Parsing Error: prefix not bound to a namespace 

的命名空間應該是(但在源XML不存在):

xmlns:prop="http://www.blank.com/prop" 
xmlns:item="http://www.blank.com/item" 

怎麼辦我解決這個問題?

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<collection> 
    <prop:id>123</prop:id> 
    <document> 
    <item:name>Document</item:name> 
    </document> 
</collection> 

XSL: (既不元素工作價值的的)

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:variable name="propsPath" select="test_Props.xml"/> 
    <xsl:variable name="props" select="document($propsPath)" /> 

    <xsl:template match="/"> 
    <html><body><div> 
     <xsl:value-of select="$props/collection/*[local-name() = 'id']"/> 
     <xsl:value-of select="$props/collection/prop:id"/> 
    </div></body></html> 
    </xsl:template> 
</xsl:stylesheet> 
+1

如果您的輸入使用前綴而不將它們綁定到名稱空間,那麼它不是一個格式良好的XML文檔,並且不能由XSLT處理。 –

回答

1

編輯:這篇文章沒有解決的具體問題。不過,我把它留在這裏,因爲它體現了一般問題的解決方案。

我發現在不修改test_Props.xml的情況下繞過命名空間問題的一種解決方案是在存根文件中使用實體引用

所以你test_Props.xml文件是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<collection> 
    <prop:id>123</prop:id> 
    <document> 
    <item:name>Document</item:name> 
    </document> 
</collection> 

現在創建解決此內容命名爲test_Props_stub.xml存根文件:

<?xml version="1.0"?> 
<!DOCTYPE doc [ 
<!ENTITY otherFile SYSTEM "test_Props.xml"> 
]> 
<root xmlns:prop="http://www.blank.com/prop" xmlns:item="http://www.blank.com/item"> 
&otherFile; 
</root> 

該解決方案通過this SO answer啓發。
然後,只需通過添加新的根節點修改document的在XSLT名稱和路徑,就大功告成了:

<xsl:variable name="propsPath" select="'test_Props_stub.xml'"/> 
<xsl:variable name="props" select="document($propsPath)/root" /> 

其餘的可以留unmodifyed。
現在,存根文件的root節點的命名空間將應用於原始XML文件,並且XPath表達式確實匹配


BTW你在下面的行了一個微小但討厭的錯誤:

<xsl:variable name="propsPath" select="test_Props.xml"/> 

你忘了周圍的文件名引號。

+0

<!ENTITY otherFile SYSTEM「test_Props.xml」>不適用於Firefox。我應該說我嘗試過。我道歉。 –

相關問題