xsl怎么解析xml中的默认命名空间xmlns

码农小黑的日志
Java领域新星创作者
2014-08-25 11:55:45
xml文件

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="MyFirstXsl.xslt"?>
<root xmlns="http://www.example.com">
<music date="2010">
<title>传奇</title>
<signer>王菲</signer>
<舞台>
<演员>路人甲</演员>
<代表作>路人甲的代表作</代表作>
</舞台>
<舞台>
<演员>路人乙</演员>
<代表作>路人乙的代表作</代表作>
</舞台>
<lyric>我一直在你身旁,从未走远...</lyric>
<!--在2010年春节联欢晚会上演唱 -->
</music>
<music date="2009">
<title>梁祝</title>
<signer>sweety</signer>
<舞台>
<演员>路人乙</演员>
<代表作>路人乙的代表作</代表作>
</舞台>
<lyric>沉默了七世纪,没放弃逆转这宿命...</lyric>
</music>
<music date="2009">
<title>幸福毛毛虫</title>
<signer>sweety</signer>
<舞台>
<演员>路人乙</演员>
<代表作>路人乙的代表作</代表作>
</舞台>
<lyric>你的出现改变我原来的想象...</lyric>
<!--很受欢迎 -->
</music>
</root>



xsl文件

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>

<xsl:template match="/">
<p align="center">
<font size="7">流行歌曲</font>
</p>
<table width="95%" border="1">
<tr>
<td width="15%">
<div align="center">歌曲</div>
</td>
<td width="10%">
<div align="center">演唱者</div>
</td>
<td width="30%">
<div align="center">伴唱</div>
</td>
<td width="20%">
<div align="center">歌词概览</div>
</td>
<td width="10%">
<div align="center">时间</div>
</td>
<td width="10%">
<div align="center">备注</div>
</td>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>

<!--注释的匹配规则-->
<xsl:template match="root/music/comment()">
<xsl:value-of select="."/>
</xsl:template>

<!--演唱者的详细介绍-->
<xsl:template match="舞台">
<xsl:value-of select="演员"/>(
<xsl:value-of select="代表作"/>)
<br/>
</xsl:template>

<xsl:template match="root/music">
<tr>
<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="title"/>
</font>
</strong>
</div>
</td>

<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="signer"/>
</font>
</strong>
</div>
</td>

<td>
<div align="center">
<strong>
<font size="5">
<xsl:apply-templates select="舞台"/>
</font>
</strong>
</div>
</td>

<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="lyric"/>
</font>
</strong>
</div>
</td>

<td>
<div align="center">
<strong>
<font size="5">
<xsl:value-of select="@date"/>
</font>
</strong>
</div>
</td>

<!--匹配注释-->
<td>
<div align="center">
<strong>
<font size="5">
<xsl:apply-templates select="comment()"/>
</font>
</strong>
</div>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>




问题主要出现在<root xmlns="http://www.example.com">这个地方,如果去掉xmlns命名空间改为<root>就能正常显示,但是一加上xmlns="http://www.example.com" 就显示的是空白。

这个问题该怎么解决呢?
...全文
559 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cds27 2014-08-30
  • 打赏
  • 举报
回复
那是因为你没有加命名空间,加上命名空间就可以用了。 如下:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:n="http://www.example.com" > 然后所有的节点引用都要加上命名空间,例如: <xsl:template match="n:root/music">

8,907

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧