2011-01-25 9 views
6

Próbuję przekształcić ciąg znaków w dane xml (odpowiedź z serwisu WWW). Próbowałem zacząć od zwykłego uzyskania nazwy:Pierwsze "mydło przedrostkowe" nie jest zdefiniowane "w pliku xslt

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="/"> 
     <table> 
     <tr> 
      <th>Name</th> 
     </tr> 
     <xsl:for-each select="soap:Envelope/soap:Body/ABRSearchByABNResponse/ABRPayloadSearchResults/response/legalName/"> 
      <tr> 
      <td> 
       <xsl:value-of select="givenName"/> 
      </td>  
      </tr> 
     </xsl:for-each> 

     </table> 
    </xsl:template> 
</xsl:stylesheet> 

Jednak otrzymuję "mydło" nie jest zdefiniowane ", jak to naprawić? Dzięki.

+0

Dobre pytanie, +1. Zobacz moją odpowiedź na wyjaśnienia i kompletne rozwiązanie. –

Odpowiedz

5

W XSLT każdy prefiks przestrzeni nazw używany w wyrażeniu XPath musi być zdefiniowany w odpowiedniej deklaracji przestrzeni nazw.

Nie dotyczy to Twojego kodu, a zatem błędu.

Rozwiązanie:

stwierdzenie nazw mydła:

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

@Alejandro: Tak, dziś rano jestem trochę śpiący. :) –

+0

@Alejandro: Naprawiono. –

+0

+1 Prawidłowa odpowiedź. –

0

Przedrostek nazw, soap w Twoim przypadku, to po prostu skrót od realnej przestrzeni nazw URI. Aby uniknąć wszędzie http://soap/envelope/, możesz raz zdefiniować, że soap oznacza http://soap/envelope/ i użyć soap w pozostałej części dokumentu.

Oznacza to, że jeśli używasz prefiksu przestrzeni nazw, należy go zdefiniować w taki sposób, aby można było znaleźć prawdziwy obszar nazw.

Można również zadeklarować, że pizza odpowiada http://soap/envelope/ i użyć zamiast tego. Przedrostek przestrzeni nazw soap nie jest specjalny.

+0

Powinienem użyć , a następnie ? – peter

Powiązane problemy