2017-01-05 22 views
0

別の親タグに「text」タグを使用しています。XSLTを使用して、空要素タグと同じ要素のコンテンツ要素タグを個別に出力する必要があります

私の入力XMLは次のとおりです:私は別の出力およびコンテンツ要素「テキスト」とそのタグをしたい別のタグにする必要があります、私はとして使用

<introText> 
<text/> 
</introText> 
<directionText> 
<text>CLICK ON EACH CATEGORY TO GET STARTED, AND WHEN YOU ARE FINISHED, EVALUATE YOUR LISTS. WHICH LIST IS LONGER?</text> 
</directionText> 

XSL:

<xsl:stylesheet version="3.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:json="http://json.org/" xmlns:mf="http://example.com/mf" exclude-result-prefixes="#all"> 

<xsl:template match="introText"> 
     "introText": { 
     <xsl:apply-templates/> 
     }, 
    </xsl:template> 

    <xsl:template match="directionText"> 
     "directionText": { 
     <xsl:apply-templates/> 
     } 
    </xsl:template> 

    <xsl:param name="length" as="xs:integer" select="100"/> 

    <xsl:param name="pattern" as="xs:string" select="concat('((.{1,', $length, '})(|$))')"/> 

    <xsl:param name="sep" as="xs:string" select="' +&#10; '"/> 

    <xsl:function name="mf:break" as="xs:string"> 
     <xsl:param name="input" as="xs:string"/> 
     <xsl:variable name="result"> 
      <xsl:analyze-string select="$input" regex="{$pattern}"> 
       <xsl:matching-substring> 
        <xsl:value-of select="concat('&quot;', regex-group(2), ' ', '&quot;')"/> 
        <xsl:if test="position() ne last()"> 
         <xsl:value-of select="$sep"/> 
        </xsl:if> 
       </xsl:matching-substring> 
      </xsl:analyze-string> 
     </xsl:variable> 
     <xsl:sequence select="$result"/> 
    </xsl:function> 

    <xsl:template match="text"> 
     "text": <xsl:sequence select="mf:break(normalize-space(string-join(node()/serialize(., $ser-params), '')))"/>, 
    </xsl:template> 

</xsl:stylesheet> 

マイ出力を得る:

introText: { 

    "text": "" 

    }, 

    directionText: { 

    "text": "CLICK ON EACH CATEGORY TO GET STARTED, AND WHEN YOU ARE" + 
"FINISHED, EVALUATE YOUR LISTS. WHICH LIST IS LONGER?", 

    } 

しかし、私は空の要素「テキスト」

出力ファイル以下の期待される出力ファイルのようにする必要が欲しい:

introText: { 

    "text":' "" ' 

    }, 

    directionText: { 

    "text": "CLICK ON EACH CATEGORY TO GET STARTED, AND WHEN YOU ARE" + 
"FINISHED, EVALUATE YOUR LISTS. WHICH LIST IS LONGER?", 

    } 

カバーするために、余分な単一引用符の必要性そのテキストが空の場合には二重引用符で囲まれています。同様に、記事には「text」タグがたくさんあるので、「text」テンプレートだけをXSLで記述します。事前に感謝

答えて

0

あなたは別に、空text要素を処理したい場合はそうのように、単に、そのような要素に合わせて、新しいテンプレートを追加します。

<xsl:template match="text[not(normalize-space())]"> 
    "text": ' "" ', 
</xsl:template> 

normalize-space()が、それはまたtextノードをピックアップすることを意味します空白だけを含んでいます。

+0

ありがとう@TimC。その働き。例えば、単一の記事のすべての空の要素が上のようになる必要があるため、 "" "は引用符を意味します。どのように私はXSLで要素の値について言及することができます。私に教えてください – User501

+0

あなたは何を意味するか分かりません。カバーする必要がある他の状況がある場合は、あなたの質問を拡大できますか?ありがとう! –

+0

確かに@TimC、私はこれを将来新しい質問として尋ねます。今のところこれは問題なく動作します。ありがとう!! – User501

関連する問題