-2
<page>
  <p>
    Republic of India (Bhārat Gaṇarājya),[c] is a country in South Asia.
    <br/>It is the seventh-largest country by geographical area.
    <br/> the second-most populous country with over 1.2 billion people, and the most populous democracy in the world.
  </p>
</page>

要素に置き換える必要があり<br>ます<p>

<p>Republic of India (Bhārat Gaṇarājya),[c] is a country in South Asia.</p>
    <p>It is the seventh-largest country by geographical area.</p>
    <p>the second-most populous country with over 1.2 billion people, and the most populous democracy in the world.</p>

これを行う方法 ?

4

1 に答える 1

2

これを行う 1 つの方法は、キーを使用して p 要素のすべての子要素を一致せ、それらを最も前にあるbr要素 (または前にbr要素がない場合は親p要素) でグループ化することです。

 <xsl:key 
    name="bits" 
    match="p/node()[not(self::br)]" 
   use="generate-id((..|preceding-sibling::br[1])[last()])"/>

次に、 p内のすべてのbr要素を照合し、キー内の次の非 br 要素を出力できます。

<p>
    <xsl:copy-of select="key('bits', generate-id())"/>
<p>

また、先行するbr要素を持たない子要素の最初のロットの場合もあります。

ここに完全なxsltがあります

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes"/>
   <xsl:key name="bits" match="p/node()[not(self::br)]" use="generate-id((..|preceding-sibling::br[1])[last()])"/>

   <xsl:template match="p">
      <p>
         <xsl:apply-templates select="key('bits', generate-id())"/>
      </p>
      <xsl:apply-templates select="br"/>
   </xsl:template>

   <xsl:template match="p/br">
      <p>
         <xsl:apply-templates select="key('bits', generate-id())"/>
      </p>
   </xsl:template>

   <xsl:template match="page">
      <xsl:apply-templates select="@*|node()"/>
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

サンプル XML に適用すると、次のように出力されます。

<p>       
   Republic of India (Bhārat Gaṇarājya),[c] is a country in South Asia.       
</p>
<p>
   It is the seventh-largest country by geographical area.       
</p>
<p>
   the second-most populous country with over 1.2 billion people, and the most populous democracy in the world.       
</p>

これは、ネストされたp要素も処理し、テキスト内にpおよび **以外の HTML を保持する必要があります。

于 2012-05-07T09:06:36.350 に答える