2017-05-11 46 views
0

這裏是我的XML格式:無法獲得與自定義命名空間XSLT輸出

<?xml version="1.0" encoding="utf-8"?> 
<Root xmlns="http://www.example.com/xyz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <child> 
       <element1>xyz</element1> 
       <element2>def</element2> 
     </child> 
</Root> 

這裏是我的XSLT

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns="http://www.example.com/xyz" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/"> 
     <xsl:for-each select="Root/child"> 
      <xsl:value-of select="element1"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

這不會有任何輸出

當我走XML文件的URL,我得到的輸出沒有任何問題。不過,我想讓這個與命名空間正常工作。

我想根據我在網上找到的其他問題進行一些調整:)改變match="/""match=Root" 1 - 這個剛剛打印出來的整個文件沒有改變xmlns="http://www.example.com/xyz"xmlns:Root="http://www.example.com/xyz"標籤

2) - 此仍然沒有打印任何東西。

我已經閱讀了一些其他類似的問題,但格式不同,它不適用於我的情況。

回答

1

您必須使用xslt中的名稱空間前綴限定自定義名稱空間中的每個元素,例如,

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:aa="http://www.example.com/xyz" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/"> 
     <xsl:for-each select="aa:Root/aa:child"> 
      <xsl:value-of select="aa:element1"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

這裏的命名空間前綴是'aa'。

創建命名空間和前綴這裏

xmlns:aa="http://www.example.com/xyz" 

之間的關聯,你必須使用相同的前綴「AA」來指代元素「根」,「孩子」,「部件1」和「在element2 「

喜歡這裏

<xsl:for-each select="aa:Root/aa:child"> 
    <xsl:value-of select="aa:element1"/> 
</xsl:for-each> 

您還可以選擇不同的前綴, 'AA' 只是一個例子。

「根」也就是命名空間中,因爲源XML文檔中的命名空間定義已經包括在引入命名空間中的元素:

<Root xmlns="http://www.example.com/xyz"> ... </Root> 

在你的烴源文檔的XML你還沒有分配命名空間前綴。如果你還想在那裏分配前綴,它看起來像

<?xml version="1.0" encoding="utf-8"?> 
<bb:Root xmlns:bb="http://www.example.com/xyz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <bb:child> 
       <bb:element1>xyz</bb:element1> 
       <bb:element2>def</bb:element2> 
     </bb:child> 
</bb:Root> 

這裏的前綴是'bb'。正如您所看到的,前綴不需要與樣式表中的前綴匹配。

+0

因此,命名空間前綴不必與xml文檔中的命名空間定義相同?我可以在xslt文檔中的xml和'xmlns:whatever =「example.com」'中使用'Root xmlns =「example.com」'? ---只是想確認這是你在說什麼 – Deena

+0

第二個後續問題 - 我的XML文檔實際上比這更嵌套,我正在嵌套循環。在嵌套循環中,我有這樣一行:''。當我使用名稱空間前綴指定每個元素時,如何指定此行? – Deena

+0

是的,但「根」不是源文檔xml中的命名空間前綴。在源文件中,您甚至沒有指定前綴。這看起來像: '<?xml version =「1.0」encoding =「utf-8」?> XYZ DEF ' – cwschmidt