2016-06-14 6 views
0

リスト要素をhtmlからxmlに変換しようとしています。 問題は、リスト要素に段落要素が含まれていて、最初のメモがテキストであることがあります。 apply-templatesコマンドで段落をコピーし、最初のテキストノートをpタグにネストします。 問題は、最初のテキストノードにも、a、span、imgなどのインラインタグが含まれている可能性があることです。 だから、私はこれのようなものが必要だと思う。 最初の音符がテキストの場合は、次のpタグまですべてをpタグにコピーします。テキスト、インラインおよび段落要素を含むリスト要素を変換する

これはこれは

<li> 
<p>Text1<span>Text</span>Test<img src=".."><a>text</a></p> 
<p>Text2</p> 
</li> 

このXLSTの結果は、この

<xsl:template match="li/text()"> 
    <p> 
     <xsl:value-of select="."/> 
    </p> 
</xsl:template> 

IST瞬間に私のXLSTを食べたように、それがどのように見えるべきかである私のソースコード

<li> Text1<span>Text</span>Test<img src=".."><a>text</a> 
<p>Text2</p> 
</li> 

です間違った

<li> 
<p>Text1</p> 
<span>Text</span> 
<p>Test</p> 
<img src=".."><a>text</a> 
<p>Text2</p> 
</li> 

これは可能性がありますか?

+0

入力 '

  • テキスト>テストで何が起こるか

    P2

  • '

    、あなたも 'p'要素にその内容をラップしたいですか?また、XSLT 2.0を使用できるのか、XSLT 1.0に制限されているのかを明記してください。 –

    +0

    "*問題は、最初のテキストノードにa、span、img *" .Noのようなインラインタグが含まれている可能性があります。これは誤った説明です。テキストノードには他のノードを含めることはできません。あなたが持っているのは、最初の 'p'の前にくるいくつかのノード(テキストと要素)です。 –

    +0

    はい、どちらも正しい – Olli

    答えて

    0

    だから私はこのようなものが必要だと思う。最初の前

    <xsl:template match="li"> 
        <xsl:variable name ="pn" select="p[1]/preceding-sibling::node()" /> 
        <xsl:if test="$pn" > 
         <p> 
          <xsl:copy-of select="$pn"/> 
         </p> 
        </xsl:if> 
        <xsl:copy-of select="p[1]"/> 
        <xsl:copy-of select="p[1]/following-sibling::node()"/> 
    </xsl:template> 
    

    上記のテンプレートをコピーし、すべての事:最初のノートは、テキストノートである場合には、このような何かを試してみてください別のpタグ

    に次のpタグまでのすべてをコピーしますp要素を新しいp要素に入れ、残りのノードをコピーします(最初はpなどすべて)。

    関連する問題