无法使用XSLT将XML(包含名称空间)转换为XHMTL

时间:2015-12-14 15:57:22

标签: xml xslt xhtml xslt-1.0

我是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>

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

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">