【问题标题】:XML Validates and XSLT fine but it does not return the result I wishedXML Validates 和 XSLT 很好,但它没有返回我希望的结果
【发布时间】:2012-09-30 03:50:48
【问题描述】:

我目前正在做 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 时)

  • 爱好
  • 最好的
  • 但它只是回报最好的爱好。

    为什么?

    【问题讨论】:

    • 您的 XML 无效。没有打开&lt;p&gt; 也没有关闭&lt;/li&gt;。此外,在您的 XSLT 中,您希望 &lt;xsl:template match="xsi:description"&gt; 在您的输入 XML 中匹配什么?
    • 抱歉错误的例子已经修复了。即使 XMl 有效仍然返回错误!

    标签: xml xslt tags xsd


    【解决方案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="*" />
    

    )

    【讨论】:

      【解决方案2】:

      了解之间的区别:

      &lt;xsl:value-of&gt;

      &lt;xsl:copy-of&gt;

      【讨论】:

        【解决方案3】:

        您还没有告诉我们前缀“xsi”绑定到哪个命名空间,但是这个前缀的常规绑定是 XML 模式实例命名空间,它不太可能包含名为 xsi:bb 的元素。可能由于这个原因,您的模板规则没有匹配任何内容,您只是从文本节点的默认模板中获取输出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-02
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多