1

我目前正在做 XML 和 XSLT,我有一个问题

我已经完成了所有工作并且验证良好,但没有给我正确的答案。一种运行良好的解决方案是使用 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 for a subtree 将读取并连接所有文本节点。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 回答