2009-03-27 8 views
3

XSLT를 처음 사용 했으므로이 질문에 대해서는 다른 번에 대답했을 수 있습니다. 내가 검색 한하지만 난 아무것도 :(XSLT 및 네임 스페이스 문제

나는이

<ns1:tagName1> 
    <ns2:tagName2> 
      This is the content 
    </ns2:tagName2>  
</ns1:tagName1> 

같은 XML을 구문 분석 할 필요를 발견하지 않았다 그리고 내가 기대하는

<xsl:template match="ns1:tagName1"> 
    <resultns1> 
     <xsl:if test="ns2:tagName2"> 
      <resultns2> 
       <xsl:value-of select="."> 
      </resultns2> 
     </xsl:if> 
    </resultns1> 
</xsl:template> 

결과이 XSL을 사용하여 , 내가 할 모든이

<resultns1> 
    <resultns2> 
     This is the content 
    </resultns2>  
</resultns1> 

대신 그것의이다

<resultns1/> 

두 태그가 모두 동일한 네임 스페이스를 사용하면 모두 예상대로 작동하지만 외부 태그가 ns1이고 내부 태그가 ns2 인 경우 내부 태그는 감지되지 않습니다. 왜 이런 일이 일어나고 있는지에 대한 단서가 있습니까?

감사합니다.

답변

4

나를 위해 잘 작동합니다; XML :

<?xml version="1.0" encoding="utf-8" ?> 
<xml xmlns:ns1="foo" xmlns:ns2="bar"> 
    <ns1:tagName1> 
    <ns2:tagName2> 
     This is the content 
    </ns2:tagName2> 
    </ns1:tagName1> 
</xml> 

XSLT :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns1="foo" xmlns:ns2="bar" 
    exclude-result-prefixes="ns1 ns2" 
> 
    <xsl:template match="/xml"> 
    <xsl:apply-templates select="*"/> 
    </xsl:template> 

    <xsl:template match="ns1:tagName1"> 
    <resultns1> 
     <xsl:if test="ns2:tagName2"> 
     <resultns2> 
      <xsl:value-of select="."/> 
     </resultns2> 
     </xsl:if> 
    </resultns1> 
    </xsl:template> 
</xsl:stylesheet> 

결과 :

<?xml version="1.0" encoding="utf-8"?> 
<resultns1> 
    <resultns2> 
    This is the content 
    </resultns2> 
</resultns1> 
1

XSLT는 XML 파일과 동일한 네임 스페이스를 선언해야합니다. 아마도 두 파일간에 ns2 선언이 약간 다를 수 있습니까? 글자의 경우 (대소 문자를 구별 함)와 슬래시 등의 경우에 특히주의하십시오. 네임 스페이스 문자열은 정확히 일치해야합니다.

그래도 도움이되지 않는다면 문제가있는 XML 및 XSLT 파일을 게시 할 수 있습니까?

0

아야!

완전한 XML 및 XSLT를 준비 내가 두 파일에 네임 스페이스가 다른 스키마 :(그래서 그들은 서로 다른 스키마를 사용하여 같은 이름을 사용 altought

언급 된 것을 깨달았하면서

주셔서 감사합니다 그들을 다른 점은 대단히 올바른 방향으로 나를 가리키기 위해 :

+0

같은 일을하기 위해 다른 별칭을 사용할 수 있어야합니다. –