XPath的问题,高手请进,前10位来者及解决问题者给分!

River2001 2002-02-05 11:58:22
一个XML文档如下:
<?xml version='1.0' encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
<book>
<author>
<name>Bible</name>
<company>ATT</company>
</author>
<title>XML Bible</title>
</book>
其对应的book.xsl如下:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="book">
<xsl:value-of select="/book/author/."/>
</xsl:template>
</xsl:stylesheet>
可以显示出结果,而将语句:<xsl:value-of select="/book/author/."/>改为
<xsl:value-of select="/book/author/self::node()"/>
却不能正常解析。请问这是什么原因,盼高手指点迷津!
另:在CSDN中怎么给分。

...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
老翔 2002-02-27
  • 打赏
  • 举报
回复
agree karma!
Justin 2002-02-27
  • 打赏
  • 举报
回复
看看这个 - from www.xml.net.cn
==================================
1.4 XML实例


哈哈,看了这么多枯燥的原理论述,你是不是已经不耐烦了。好,现在就让我们再把刚才关于客户联系列表的例子完整地看一遍。通过这个例子,相信你将对XML的整体机制有一个大致的了解。

在1.1.2节,我们为我们的置标语言FCLML制定了下面的DTD:

fclml.dtd:
<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT 联系人列表 (联系人)*>
<!ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)>
<!ELEMENT 地址 (街道,城市,省份)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT ID (#PCDATA)>
<!ELEMENT 公司 (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT 电话 (#PCDATA)>
<!ELEMENT 街道 (#PCDATA)>
<!ELEMENT 城市 (#PCDATA)>
<!ELEMENT 省份 (#PCDATA)>

关于客户联系信息的标准XML文件是这样的:

client.xml
<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 联系人列表
SYSTEM "fclml.dtd">
<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>

<联系人列表>
<联系人>
<姓名>张三</姓名>
<ID>001</ID>
<公司>A公司</公司>
<EMAIL>zhang@aaa.com</EMAIL>
<电话>(010)62345678</电话>
<地址>
<街道>五街1234号</街道>
<城市>北京市</城市>
<省份>北京</省份>
</地址>
</联系人>

<联系人>
<姓名>李四</姓名>
<ID>002</ID>
<公司>B公司</公司>
<EMAIL>li@bbb.org</EMAIL>
<电话>(021)87654321</电话>
<地址>
<街道>南京路9876号</街道>
<城市>上海</城市>
<省份>上海</省份>
</地址>
</联系人>
</联系人列表>

可能你已经注意到,文件的前三行在前面并没见过。第一行称作处理指示。以后我们还会再详细谈到处理指示和它们的属性。现在,我们只须知道凡是XML文件都需要这样一行,就象HTML文件都需要用〈HTML〉开头一样。第二行指定了和该XML文件相连的样式单文件,第三行则指定了和它相连的DTD文件。

下面,我们需要将不同的样式赋予各个标记,以便浏览器来显示数据。象我们前面所说的,XML允许你创建自己的标记集,因此,你必须创建你自己的样式指示,这样,浏览器就可以通过这些指示来显示它从未见过的标记下的内容。

因为样式单是独立于数据的,同一个样式单可以由许多XML文件共享。而且,样式单可以用不同的样式语言来描述,例如使用层叠式样式单语言CSS(Cascading Style Sheet Language),或者使用可扩展样式语言XSL(eXtensible Style Language)。在这个例子中我们使用XSL。

现在我们为client.xml制定一个样式单:

mystyle.xsl
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:template><xsl:apply-templates/></xsl:template>

<xsl:template match = "/">
<HTML>
<HEAD>
<TITLE>F公司的客户联系信息</TITLE>
</HEAD>
<BODY>
<xsl:apply-templates select="联系人列表"/>
</BODY>
</HTML>
</xsl:template>

<xsl:template match = "联系人列表">
<xsl:for-each select="联系人">
<UL>
<LI><xsl:value-of select="姓名"/></LI>
<UL>
<LI>用户ID:<xsl:value-of select="ID"/></LI>
<LI>公司: <xsl:value-of select="公司"/></LI>
<LI>EMAIL: <xsl:value-of select="EMAIL"/></LI>
<LI>电话: <xsl:value-of select="电话"/></LI>
<LI>街道: <xsl:value-of select="地址/街道"/></LI>
<LI>城市: <xsl:value-of select="地址/城市"/></LI>
<LI>省份: <xsl:value-of select="地址/省份"/></LI>
<LI>ZIP: <xsl:value-of select="地址/ZIP"/></LI>
</UL>
</UL>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

好了,我们已经完成了XML和它相关的DTD、XSL文件,处理器会根据DTD来检查XML的语法,然后再根据XSL的指示显示这些信息。在后面,我们还会详细地叙述处理的过程。现在,你只需知道这个XML文件被样式单转换为下面的HTML文件:

<HTML>
<HEAD>
<TITLE>F公司的客户联系信息</TITLE>
</HEAD>
<BODY>
<UL>
<LI>张三</LI>
<UL>
<LI>用户ID: 001</LI>
<LI>公司: A公司</LI>
<LI>EMAIL: zhang@aaa.com</LI>
<LI>电话: (010)62345678</LI>
<LI>地址: 五街1234号</LI>
<LI>城市: 北京市</LI>
<LI>省份: 北京</LI>
<LI>ZIP: 100001</LI>
</UL>

<LI>李四</LI>
<UL>
<LI>ID: 002</LI>
<LI>公司: B公司</LI>
<LI>EMAIL: li@bbb.org</LI>
<LI>电话: (021)87654321</LI>
<LI>地址: 南京路9876号</LI>
<LI>城市: 上海市</LI>
<LI>省份: 上海</LI>
<LI>ZIP: 200002</LI>
</UL>
</UL>

</BODY>
</HTML>


你所看到的显示结果,实际上同上面这个HTML文件的显示结果是相同的。

张三
用户ID: 001
公司: A公司
EMAIL: zhang@aaa.com
电话: (010)62345678
地址: 五街1234号
城市: 北京市
省份: 北京
ZIP: 100001
李四
ID: 002
公司: B公司
EMAIL: li@bbb.org
电话: (021)87654321
地址: 南京路9876号
城市: 上海市
省份: 上海
ZIP: 200002


 

有兴趣的读者可以把上面这三个文件拷在一个目录中,然后用IE5打开文件client.xml,看看结果是不是这样。

在后面的三章中,我们将分别详细阐述有关XML文件、DTD和样式单文件的规则。




brallow 2002-02-06
  • 打赏
  • 举报
回复
第一个,不好意思我不懂
River2001 2002-02-06
  • 打赏
  • 举报
回复
问题已解决,感谢各位高手的指点!
关于如何在CSDN中给分,我已找到答案,如下:
屏幕的左边,有‘系统功能’一项。打开有‘我的问题’一项,打开后出现你所提出的所有问题。点问题右边的‘管理’,在密码框输入PASWORD后。将分数加入回复人的分数框即可
现在给分!
chechy 2002-02-06
  • 打赏
  • 举报
回复
除了xmlns:xsl需要改以外,和IE浏览器也有一些关系。
如果是IE5.X,需要运行xmlinst.exe。或者是IE6,才能正常显示xmlns:xsl="http://www.w3.org/1999/XSL/Transform"的XSL文档。
karma 2002-02-06
  • 打赏
  • 举报
回复
you are using the outdated XSL, change this line to
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">

to

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

8,906

社区成员

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

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