1

私は現在XMLとXSLTを行っていますが、質問があります

私はすべてを行い、正常に検証しましたが、正しい答えは得られません。うまく機能した解決策の1つは、CDATAを使用することでしたが、xmlns="http://www.w3.org/xhtmlを使用したいと思います。

これが私の関連コードです

XMLスキーマ

        <xs:element name="bb">
            <xs:complexType mixed="true">
                <xs:sequence>
                    <xs:any namespace="http://www.w3.org/1999/xhtml"
                            minOccurs="0"
                            maxOccurs="unbounded" 
                            processContents="skip"/>
                </xs:sequence>          
            </xs:complexType>
        </xs:element>

XSLT

<xsl:template match="xsi:bb">
    <div style="font-family:calibri;font-size:16">
        <span style="color:#000"> 
            Babo is: 
        </span> 
        <xsl:value-of select="." disable-output-escaping="yes"/>
    </div>
</xsl:template>

XML

<bb>
    <li xmlns="http://www.w3.org/1999/xhtml"> 
        hoby
    </li> 

    <li xmlns="http://www.w3.org/1999/xhtml"> 
        the best
    </li> 
</bb>

私の理論によれば、それは戻るはずです(XMLをHTMLに変換するとき)

  • ホビー
  • 最高の
  • しかし、それはただ最高の趣味を返しています。

    なんで?

    4

    3 に答える 3

    1

    li要素にテンプレートを適用する必要があると思います。サブツリーのxsl:value-of runは、すべてのテキストノードを読み取って連結します。AFAIR(間違っている可能性があります-これを再確認することをお勧めします)無効化出力エスケープは、テキストノードが属する要素ではなく、テキストノードのコンテンツに使用されます。その理由は、li要素(あなたの場合)はツリー内の別個の要素であり、要素としてではなく、そのように内部的に扱われるためです。li要素をそのままコピーしたい場合は、次のように使用できます。

    <xsl:copy-of select="xhtml:li" xmlns:xhtml="http://www.w3.org/1999/xhtml"/>
    

    (または、すべての要素をコピーする場合:

    <xsl:copy-of select="*" />
    

    )。

    于 2012-09-30T06:42:48.267 に答える
    0

    の違いについて学ぶ

    <xsl:value-of>

    <xsl:copy-of>

    于 2012-09-30T13:42:44.083 に答える
    0

    プレフィックス「xsi」がバインドされている名前空間については説明していませんが、このプレフィックスの従来のバインドはXMLスキーマインスタンスの名前空間であり、xsi:bbという要素が含まれている可能性はほとんどありません。おそらくこの理由で、テンプレートルールは何にも一致せず、テキストノードのデフォルトテンプレートから出力を取得するだけです。

    于 2012-09-30T20:44:00.320 に答える