【问题标题】:Unable to convert XML (containing namespaces) to XHMTL using XSLT无法使用 XSLT 将 XML(包含名称空间)转换为 XHMTL
【发布时间】:2015-12-14 15:57:22
【问题描述】:

我是 XML 新手。我的 XML 文件包含两个名称空间。如果没有定义命名空间,我可以使用 XSLT 轻松地将 XML 转换为 XHTML。当我尝试使用路径表达式在 XSLT 中使用名称空间时,它不起作用。这是我的代码。

data.xml

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="style.xsl" ?>
<a:personData xmlns:a="http://auc.com">
 <a:user id="1">
    <a:fname>Assad</a:fname>
    <a:lname>Ch</a:lname>
    <a:email>assad@example.com</a:email>
 </a:user>

 <a:user id="2">
    <a:fname>John</a:fname>
    <a:lname>Smith</a:lname>
    <a:email>John@example.com</a:email>
 </a:user>  
</a:personData>

style.xsl

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
    <html>
        <head>
            <title>Some Title</title>
        </head>
        <body>
            <p>
               <xsl:value-of select="a:personData/a:user/a:fname" />
            </p>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>

我无法弄清楚我的代码有什么问题。

【问题讨论】:

    标签: xml xslt xhtml xslt-1.0


    【解决方案1】:

    据我所知,您缺少两件事。 在您的 xml 中,personData 元素的结束标记缺少命名空间前缀,它应该是

    </a:personData>
    

    在你的 xslt 中你也应该包含命名空间,

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

    应该变成

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://auc.com">
    

    【讨论】:

    • 感谢您的帮助。实际上,我在这里粘贴我的 xml 源代码时错过了结束标记。正如您所建议的,我在我的 XLST 文件中定义了命名空间并且它有效。非常感谢。
    • 我已经编辑了您的帖子,因为它有格式问题。请查找有关格式化代码here的更多信息。
    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 2015-05-26
    • 2010-12-16
    • 2019-11-26
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多