2017-01-29 12 views
0

xmlテキストを含む要素を含む入力xmlファイルがあります。要素テキストを読み込んでノードセットにして、xpathで検索することができます。xalan:ノードセットはノードではなくテキストだけをレンダリングします

<TEMPLATE_STRUCTURE_XML><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<TRANSACTION> 
<VERSION>1.3</VERSION> 
<SCREEN>something123</SCREEN> 
</TRANSACTION> 
]]></TEMPLATE_STRUCTURE_XML> 

私は値something123を取得したい。この場合:これは作品です。

問題は、私は(ハードコード)を入れた場合、そのXSLでインナーxmlファイルのセクション、のXalanです:ノードセット()正常に動作しますが、私はXSLを使用する場合、それは動作しません:価値の 。 oXygen XMLeditorは、value-ofの結果がノードではなくプレーンテキストになったことを私に示しています。

次の作品は:

<xsl:variable name="statementSummaryData"> 
     <ss_Set> 
      <TRANSACTION> 
       <VERSION>1.3</VERSION> 
       <SCREEN>something123 
       </SCREEN> 
      </TRANSACTION> 
     </ss_Set> 
    </xsl:variable> 
    <xsl:variable xmlns:xalan="http://xml.apache.org/xalan" name="ssTemplatesNodeSet" select="xalan:nodeset($statementSummaryData)"/> 
    <xsl:value-of select="substring-before($ssTemplatesNodeSet//SCREEN,' ')"/> 

以下は動作しません。 <ss_Set>要素がノードになりますが、価値の出力は<内ss_Set >プレーンテキストになり、次の

<xsl:variable name="statementSummaryWithHeader"> 
      <xsl:value-of select="TEMPLATE_STRUCTURE_XML" disable-output-escaping="yes"/> 
    </xsl:variable> 
    <xsl:variable name="statementSummaryWithNoHeader"> 
    <xsl:value-of select="substring-after($statementSummaryWithHeader,'?>')" disable-output-escaping="yes"/> 
    </xsl:variable> 
<xsl:variable name="statementSummaryData"> 
    <ss_Set> 
    <xsl:value-of select="$statementSummaryWithNoHeader" disable-output-escaping="yes"/> 
    </ss_Set> 
</xsl:variable> 
<xsl:variable xmlns:xalan="http://xml.apache.org/xalan" name="ssTemplatesNodeSet" select="xalan:nodeset($statementSummaryData)"/> 
<xsl:value-of select="substring-before($ssTemplatesNodeSet//SCREEN,' ')"/> 

のいずれかに動作しません:

<xsl:variable name="statementSummaryWithHeader"> 
      <xsl:value-of select="TEMPLATE_STRUCTURE_XML" disable-output-escaping="yes"/> 
    </xsl:variable> 
    <xsl:variable name="statementSummaryWithNoHeader"> 
    <xsl:value-of select="substring-after($statementSummaryWithHeader,'?>')" disable-output-escaping="yes"/> 
    </xsl:variable> 
    <xsl:variable name="statementSummaryData"> 
     <ss_Set> 
      <xsl:value-of xmlns:xalan="http://xml.apache.org/xalan" select="xalan:nodeset($statementSummaryWithNoHeader)"/> 
     </ss_Set> 
    </xsl:variable> 
    <xsl:variable xmlns:xalan="http://xml.apache.org/xalan" name="ssTemplatesNodeSet" select="xalan:nodeset($statementSummaryData)"/> 
    <xsl:value-of select="substring-before($ssTemplatesNodeSet//SCREEN,' ')"/> 

答えて

0

をあなたが混合されていますリンゴ、オレンジ。 node-set()関数は、結果ツリーフラグメントをとり、ノードセットに変換できます。 CDATAを解析可能なマークアップにすることはできません。あなたが欲しいの文字列を抽出するために何ができるかを学ぶために

、以下を参照してください
https://stackoverflow.com/a/37777846/3016153

+0

を私はいくつかの実装があると考えているノードセット()文字列を指定した場合、解析を行いますそれには-xml()がありますが、Xalanの実装がそれらのいずれかであるかどうかはわかりません。 –

+0

@MichaelKay私は以前この会話があったと信じています。私はこれを行う 'node-set()'の実装について知らない。私は確かにXalanがそうでないことを知っている:http://xsltransform.net/bFWR5EF –

+0

よかった、それを得た。だから私はその特定の内部要素の出力を得るためにsubstring-beforeとsub-stringを使うつもりです。しかし、私は、を使用してノードを作成することによって、ツリーを動的に構築することでそれを行う別の方法を見ています。詳細はこちら(あなたの助けを借りてマイケルに感謝):http://stackoverflow.com/questions/5418493/create-nodes-from-string-variable –

関連する問題