XSLT

2009-07-15 5 views
1

とXMLの内部XMLを読み取る私は要素内に定義されたXML列を持つこのXMLドキュメントを得ましたXMLではなく、文字列です。XSLT

これをXSLTのXPathで使用するにはどうすればよいですか?

+0

あなたの質問の「属性」はFIELD要素のNAME属性を参照しているとは思いませんが、それは何を参照していますか?質問を明確にすることはできますか?また、XMLの途中のXML処理命令は、無効または少なくとも非常に奇妙です。 XMLの仕様によれば、それは最初に現れなければならず、他のものの前に現れなければならない(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という関数があります。この関数を使用すると、埋め込みドキュメントを変数にインポートし、入力ドキュメントと同じように処理できます。