1

ネストされたxmlファイルをテキストに変換しようとして問題が発生しました。私が本当に必要としている出力は、特定のノードとその子(この場合は「secondBit」および「thirdBit」タイプのノード「div」)のテキストコンテンツです。残念ながら、いくつかの内部タグ(span class = "bold")を削除し、終了タグをスペースに置き換える必要があります。入力ファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<myxml>
<content>
<p class="heading">Omit this please</p>
  <div type="firstBit">
    <div class="extended"><span class="italic">this as well</span>
    </div>
    <meta name="factor"/>
  </div>
  <div type="secondBit">
    <p>
      <meta name="first" id="9"/>Some text in here.</p>
  </div>
  <div type="thirdBit">
    <div class="internal" >
      <div class="intro">
        <p class="varied">And then a <span class="bold">Button</span>can be pushed <span class="bold">without</span>any trouble</p>
      </div>
    </div>
  </div>
</content>
</myxml>

これが私がこれまでに持っているxslです:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:strip-space elements="*" />

<xsl:output method="text" encoding="UTF-8" indent="no"
    omit-xml-declaration="yes" />

<xsl:template match="node()">
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="div[@type= ('secondBit', 'thirdBit')]">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>

しかし、これは私に出力を与えます:

ここにいくつかのテキストがあります。その後、ボタンを問題なく押すことができます

一方、出力が必要です(スペースに注意してください):

ここにいくつかのテキストがあります。その後、ボタンを問題なく押すことができます

おそらく次のxslスニペットを導入する必要があることはわかっていますが、方法がわかりません。

<xsl:template match="span[@class='bold']">
    <xsl:value-of select="normalize-space(.)"/><xsl:text> </xsl:text>
</xsl:template>

ここがこれらの質問をする場所ではない場合、私は人々の時間を無駄にしたことをお詫びします。

そうでなければ、すべての助けに感謝します。

4

1 に答える 1

0

これが私の提案です:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:strip-space elements="*" />

<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="*[not(.//div[@type= ('secondBit', 'thirdBit')])]"/>

<xsl:template match="*[.//div[@type= ('secondBit', 'thirdBit')]] |
                     div[@type= ('secondBit', 'thirdBit')] |
                     div[@type= ('secondBit', 'thirdBit')]//*" priority="5">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="div[@type= ('secondBit', 'thirdBit')]//span[@class='bold']" priority="10">
    <xsl:apply-templates/>
    <xsl:text> </xsl:text>
</xsl:template>

</xsl:stylesheet>

Saxon 9.4 HEを使用して入力サンプルに適用すると、結果が得られますSome text in here.And then a Button can be pushed without any trouble

于 2012-09-24T17:01:21.163 に答える