XSLT

2009-07-15 4 views
1

와 XML 내부 XML을 읽고 난 요소 내부에 정의 된 XML 문자열이 XML 문서를 가지고 문자열이 아닌 XML.XSLT

어떻게 이것을 XSLT에서 XPath와 함께 사용할 수 있습니까?

+0

귀하의 질문에 "속성"이 FIELD 요소의 NAME 속성을 참조하지 않는다고 생각하지만 그 내용은 무엇을 의미합니까? 질문을 명확히 할 수 있습니까? 또한 XML 중간의 XML 처리 명령은 완전히 무효이거나 적어도 이상합니다. XML specificaton에 따르면, 그것은 처음에 나타나야하고 다른 어떤 것보다 앞에 나와야합니다 (SHOULD). –

+0

이것은 유효한 XML이 아닙니다. XML 선언은 처음부터 시작해야합니다. –

답변

1

은 "xmlString을"속성 내부의 XML은 <>로 이스케이프 문자열이 아닌 XML로 읽습니다.

생각해보십시오. 정확히 어떻게해야 할 것인가? XSLT는 XML에 XML이 포함되어 있고 중첩 된 XML이 CDATA 섹션 내에 있지 않음을 어떻게 알 수 있습니까?

+0

글쎄, 실제로는 XML이 아닙니다. –

+1

@ 존 : 사실, * XML 문자열을 나타냅니다. 나는 당신이 OP의 질문을 오해 한 것 같아요. – Cerebrus

0

저는 이것이 XSLT의 한 단계 과정으로 이루어질 수 있다고 생각하지 않습니다.

유일한 기회는 문서 문자열을 추출하고 별도의 XML 문서로 구문 분석 한 다음 거기에서 가져 오는 것입니다. 생산

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*" /> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="FIELD[@NAME='xmlstring']"> 
    <xsl:copy> 
     <xsl:copy-of select="@*" /> 

     <!-- now this is somewhat brittle, I would not really recommend 
      it for production use, but maybe it helps nevertheless --> 
     <xsl:choose> 
     <xsl:when test="contains(., '&lt;?xml')"> 
      <xsl:value-of select="substring-after(., '?&gt;')" disable-output-escaping="yes" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="." disable-output-escaping="yes" /> 
     </xsl:otherwise> 
     </xsl:choose> 

    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

:

는 대체 솔루션으로, 당신은 이런 변화를 쓰기 콜드 다음 두 번째 단계에서 일반 XML 문서처럼 사용할 수 있습니다

<HIT> 
    <FIELD NAME="xmlstring"> 
    <kontaktpersoner> 
     <person> 
     <funksjon><![CDATA[Økonomi]]></funksjon> 
     <tittel><![CDATA[regnskapsansv.]]></tittel> 
     <email><![CDATA[[email protected]]]></email> 
     <navn><![CDATA[Test Test]]></navn> 
     </person> 
     <person> 
     <funksjon><![CDATA[Leder]]></funksjon> 
     <tittel><![CDATA[adm. dir.]]></tittel> 
     <email><![CDATA[[email protected]]]></email> 
     <navn><![CDATA[Test2 Test]]></navn> 
     </person> 
    </kontaktpersoner> 
    </FIELD> 
</HIT> 

.

2

xslt 프로세서를 전환 할 수있는 경우 Saxon은 parse 함수를 사용하여 포함 된 문서를 변수로 가져 와서 입력 문서처럼 처리 할 수 ​​있습니다.