2013-10-10 101 views
2

我閱讀其他問題。這些文件看起來相似,所以我不知道,什麼是這裏的錯...XML + XSL - 不顯示正確

這裏是我的XML:

<?xml version="1.0" standalone="no"?> 
<?xml-stylesheet type="text/xsl" href="/Projekt1.xsl"?> 
<x:projekte xmlns:x="urn:Projekt1"> 
    <person id= "1"> 
     <name>Franz Mommar</name> 
     <link>http://pd.zhaw.ch/portraet/images/</link> 
     <zhaw>mino.jpg</zhaw> 
     <googlemapsx>285.2342</googlemapsx> 
     <googlemapsy>234.3598</googlemapsy> 
     <facebook>franzmoammar</facebook> 
     <skype>franz.moammar</skype> 
     <twitter>franzmoammar</twitter> 
    </person> 
    <person id= "2"> 
     <name>Rüdiger Mannheim</name> 
     <link>http://www.poese.org/wp-content/uploads/2010/07/</link> 
     <zhaw>AWNEX74E.jpg</zhaw> 
     <googlemapsx>45.2342</googlemapsx> 
     <googlemapsy>32.3598</googlemapsy> 
     <facebook>franzmoammar</facebook> 
     <skype>franz.moammar</skype> 
     <twitter>franzmoammar</twitter> 
    </person> 
</x:projekte> 

這裏的XSL:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <table border="1"> 
        <tr> 
         <th>Name</th> 
         <th>X-Coordinate</th> 
         <th>Y-Coordinate</th> 
         <th>Facebook</th> 
         <th>Skype</th> 
         <th>Twitter</th> 
         <th>Bild</th> 
        </tr> 
        <xsl:for-each select="projekte/person"> 
        <tr> 
         <td><xsl:value-of select="name"/></td> 
         <td><xsl:value-of select="googlemapsx"/></td> 
         <td><xsl:value-of select="googlemapsy"/></td> 
         <td><xsl:value-of select="facebook"/></td> 
         <td><xsl:value-of select="skype"/></td> 
         <td><xsl:value-of select="twitter"/></td> 
         <!--<td><src href="{link}{zhaw}"/></td>--> 
        </tr> 
        </xsl:for-each> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

我在這個文件上試了幾個小時,但是我沒有找到解決方案。

在XML我右鍵 - >打開方式 - >火狐

回答

4

命名空間可能是您的問題。在你的XML的projekte元素命名空間「金塔:Projekt1」

<x:projekte xmlns:x="urn:Projekt1"> 

但有在你的XSLT命名空間沒有提及,所以它是沒有命名空間尋找projekte元素,所以不會匹配名稱空間中的一個。

的解決方案是聲明命名空間中的XSLT

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:x="urn:Projekt1" exclude-result-prefixes="x"> 

然後匹配元素

<xsl:for-each select="x:projekte/person"> 

「排除對結果的前綴」時使用的前綴,在你的XPath表達式用於在輸出中沒有實際元素使用名稱空間的情況下停止包括名稱空間聲明的輸出XML。

或者,你可以只在XPath表達式中使用外卡,那麼你就不會擔心申報命名空間

<xsl:for-each select="*/person"> 
+0

謝謝隊友!非常感謝!這做到了! :)但:我必須在for-each循環中使用「*/person」而不是「x:/ projekte/person」,因爲這一項無效。 :) Greets Trudler – codepleb

+1

也許你的評論中有一個錯字,但它應該是「x:projekte/person」而不是「x:/ projekte/person」。你在那裏有一個流氓斜線...... –

0

如果您使用的是源「/項目,它假定在當前驅動器的根看,只要使用Projekt1.xsl在xml文件的源文件中,即沒有/

+0

謝謝您的回答! :)我嘗試了兩種,並帶來不同的結果。用「/」我可以得到沒有結構的內容,否則我只能得到表格的標題。不知道那裏有什麼問題。問候 – codepleb