2017-11-22 4 views
0

xsl:variableの中にタグの値を抽出するのに問題があります。 sample createdxsl:variable内でtextnodeの値を抽出します。

XML

<Result> 
    <resultDetails> 
    <resultDetailsData> 
     <itemProperties> 
     <ID>1</ID> 
     <type>LEVEL</type> 
     <value>5</value> 
     </itemProperties> 
    </resultDetailsData> 
    </resultDetails> 
</Result> 

XSL

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl"> 
    <xsl:output omit-xml-declaration="yes" encoding="utf-16" 
     indent="yes" /> 

    <xsl:template name="barTemplate" match="Result/resultDetails"> 
     <xsl:call-template name="fooTemplate"/> 
    </xsl:template> 
    <xsl:template name="fooTemplate"> 
     result -- <xsl:value-of select="$allFooList"/> -- 
     result -- <xsl:value-of select="$allFooList/fooMap/fooList[UsedBy='hola']/Code[normalize-space(@fooValue)=normalize-space('CNS')]/@barValue"/> -- 
    </xsl:template> 

    <xsl:variable name="allFooList" > 
     <fooMap> 
      <fooList> 
       <UsedBy>hola</UsedBy> 
       <Code fooValue="LP" barValue="Linkin" >We love Chester</Code> 
       <Code fooValue="LP" barValue="Park" /> 
      </fooList> 
     </fooMap> 
    </xsl:variable> 

</xsl:stylesheet> 

私の目標は、2番目の結果の印刷で "我々はチェスターを愛し" を抽出して印刷することです。その印刷用ブランク

私は間違っていますか?この要素で先発ためまあ

+2

XSLT 1プロセッサを使用している場合、変数は結果ツリーの断片であり、ノード集合ではありません。あなたは '$ allFooList/fooMap/...'での試行でエラーを出しませんか?そのような値をハードコードしたい場合は、それらをXSLT名前空間とは異なる名前空間の最上位の要素に入れてからアクセスしてください。 'ドキュメント( '')/ */ns:fooMap/ns:fooList/...'あるいは、XSLT 1プロセッサがサポートしている拡張機能に応じて、 'exsl:node-set($ allFooList)/ fooMap/... 'かそれに類するものを使う必要があります。 –

答えて

0

<Code fooValue="LP" barValue="Linkin" >We love Chester</Code> 

@fooValueにスペースを正規化する場合でも、 'CNS' を等しくしません。

また、XSLT 1.0では、前のコメントで指摘されているように、結果ツリーのフラグメント内からノードを選択することはできません。