2011-01-25 3 views
6

xml 데이터 (웹 서비스의 응답)로 문자열을 변환하려고합니다. 나는 이름을 얻는 것만으로 간단 해 보려고했습니다 :xslt 파일에서 "prefix 'soap'이 정의되지 않았습니다."

<?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> 

그러나 "접두어 '비누'가 정의되지 않았습니다."어떻게 수정합니까? 감사합니다. .

+0

좋은 질문입니다. +1. 설명과 완전한 해결책을 위해 나의 대답을보십시오. –

답변

5

XSLT에서 XPath 표현식에 사용 된 모든 네임 스페이스 접두어는 해당 네임 스페이스 선언에 정의되어야합니다.

이것은 코드 및 오류로 인해 발생하지 않습니다.

솔루션 :

는 비누 네임 스페이스를 선언 :

<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 : 네, 오늘 아침에 잠이 듭니다. :) –

+0

@Alejandro : 수정 됨. –

+0

+1 정답. –

0

네임 스페이스 접두사, 귀하의 경우 soap는 실제 네임 스페이스 URI 단지 속기이다. 도처에 http://soap/envelope/이 없도록하려면 soaphttp://soap/envelope/을 나타내고 문서의 나머지 부분에 soap을 사용하도록 정의 할 수 있습니다.

즉, 네임 스페이스 접두사를 사용하면 실제 네임 스페이스를 찾을 수 있도록 정의해야합니다.

또한 pizzahttp://soap/envelope/에 해당한다고 선언하고이를 대신 사용할 수 있습니다. soap 네임 스페이스 접두사는 특별하지 않습니다.

+0

그래서 내가 사용해야합니다 "xsl : for-each select = 가 선택한? – peter

관련 문제