2013-10-10 2 views
2

다른 질문이 있습니다. 파일이 유사한 모습, 그래서 나도 몰라, 여기에 잘못이 무엇 ... 여기 XML + XSL - 올바른 표시되지 않습니다.

내 XML입니다 :

<?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 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을 마우스 오른쪽 버튼으로 클릭

-> 열기 -> 파이어 폭스

답변

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

고마워요! 큰 큰 감사! 이것은 그것을했다! :)하지만, "x :/projekte/person"대신 for - each 루프에서 "*/person"을 사용해야했습니다. 왜냐하면이 것이 작동하지 않았기 때문입니다. :) Greets Trudler – codepleb

+1

아마도 귀하의 코멘트에 오타가 있지만 "x :/projekte/person"이 아닌 "x : projekte/person"이어야합니다. 거기에 불량배가있어 ... –

0

원본에서 '/ 프로젝트를 사용하는 경우, 그것은 현재 드라이브의 루트에보고 가정, 단지 사용 Projekt1.xsl xml 파일의 출처, 즉/

+0

감사 선언에 대해 걱정할 필요가 없습니다 것입니다! :) 나는 둘 다 시도하고 다른 결과를 가져옵니다. "/"를 사용하면 구조체없이 내용을 얻습니다. 그렇지 않으면 표의 제목 만 얻습니다. 거기에 무엇이 잘못된지 모릅니다. Greets – codepleb

관련 문제