2013-10-23 1 views
0

XSL 문서에서 내부 XML 데이터에 액세스하려고합니다. 그렇게하면 Apache Xalan은 문서 ('')를 사용하여 java.lang.NullPointerException을 발생시킵니다.XSL 소스에서 내부 XML 데이터에 액세스

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:ext="http://exslt.org/common" 
xmlns:my="http://example.com/2006/some-data"> 
    <xsl:output omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 

    <my:params xml:space="preserve"> 
     <pattern> 
      <old>&lt;p&gt;</old> 
      <new>P</new> 
     </pattern> 
     <pattern> 
      <old>&lt;/p&gt;</old> 
      <new>/P</new> 
     </pattern> 
     <pattern> 
      <old>&lt;strong&gt;</old> 
      <new>STRONG</new> 
     </pattern> 
     <pattern> 
      <old>&lt;/strong&gt;</old> 
      <new>/STRONG</new> 
     </pattern> 
    </my:params> 

    <xsl:variable name="vrtfPats"> 
    <xsl:for-each select="document('')/xsl:stylesheet/my:params/*"> 
     <xsl:copy-of select="."/> 
    </xsl:for-each> 
    </xsl:variable> 


</xsl:stylesheet> 

의 Xalan을 사용하여 XSL 파일로부터 내부 데이터에 액세스 할 수있는 다른 방법이된다 여기

는 XSL 소스입니까?

답변

0

은 같이 ... 노드를 저장하고 스타일 시트에서 사용하는 변수를 선언하지보십시오 :

<test xmlns:my="http://example.com/2006/some-data" xmlns:ext="http://exslt.org/common" 
     xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <pattern-match> 
      <old-match>&lt;p&gt;</old-match> 
      <new-match>P</new-match> 
     </pattern-match> 
     <pattern-match> 
      <old-match>&lt;/p&gt;</old-match> 
      <new-match>/P</new-match> 
     </pattern-match> 
     <pattern-match> 
      <old-match>&lt;strong&gt;</old-match> 
      <new-match>STRONG</new-match> 
     </pattern-match> 
     <pattern-match> 
      <old-match>&lt;/strong&gt;</old-match> 
      <new-match>/STRONG</new-match> 
     </pattern-match> 
    </test> 
:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:ext="http://exslt.org/common" 
xmlns:my="http://example.com/2006/some-data"> 
<xsl:output omit-xml-declaration="yes"/> 
<xsl:strip-space elements="*"/> 

<my:params xml:space="preserve"> 
    <pattern> 
     <old>&lt;p&gt;</old> 
     <new>P</new> 
    </pattern> 
    <pattern> 
     <old>&lt;/p&gt;</old> 
     <new>/P</new> 
    </pattern> 
    <pattern> 
     <old>&lt;strong&gt;</old> 
     <new>STRONG</new> 
    </pattern> 
    <pattern> 
     <old>&lt;/strong&gt;</old> 
     <new>/STRONG</new> 
    </pattern> 
</my:params> 

<xsl:template match="/"> 
    <test> 
    <xsl:for-each select="document('')//my:params"> 
     <xsl:apply-templates/> 
    </xsl:for-each> 
    </test> 
</xsl:template> 
<xsl:template match="pattern"> 
    <pattern-match> 
     <xsl:apply-templates/> 
    </pattern-match> 
</xsl:template> 
<xsl:template match="old"> 
    <old-match> 
     <xsl:apply-templates/> 
    </old-match> 
</xsl:template> 
<xsl:template match="new"> 
    <new-match> 
     <xsl:apply-templates/> 
    </new-match> 
</xsl:template> 

</xsl:stylesheet> 

이 대답을 산출