初学XSL,请问一个XSL转换XML过程的一个有关问题?
初学XSL,请教一个XSL转换XML过程的一个问题??
XML要被转成XSL样式的HTML,那么处理器肯定要读取这2个文件 XML 和 XSL.
XML的源文档被处理器读取后应该变成DOM树,XSL样式也被读取后成为DOM树,现在的问题是:
在匹配的时候,到底是谁匹配谁? 到底哪个是主动者(遍历的是XSL还是XML)
我从很多书上的例子中发现,好象是只要匹配了根节点 <xsl:template match= "/ "> ,程序执行的流程的交给了XSL了,接下去完全是 <xsl:apply-templates select= "xxx "/> 这类语句在导航程序的流程,最后完成了转换的任务.
---貌似是第1次匹配是XML主动匹配XSL,由XML里的根节点去找XSL里的根 <xsl:template match= "/ "> ,之后全是XSL在控制.
(即:仅仅匹配了一个源XML的根节点,之后所有的任务全由XSL里由根的模式所连带出来的一系列过程最后结束并完成了转换.但不应该是这样就结束了啊,源XML的根判断好了不是还要判断他下面的子节点吗?应该再让子节点再去XSL文件里找配对的xsl模板规则啊)
我在想:如果没有类似 <xsl:apply-templates select= "xxx "/> 这类导航语句,只存在 <xsl:template match= "xxx "> 这类模板规则,处理器是否会从源XML的DOM树里从根节点开始依次拿出各个节点来,看是否能找到XSL里对应的模板规则来匹配,从而得到HTML呢?
比如:
XML文档:
<students>
<student>
<name> 张三 </name>
<age> 18 </age>
</student>
</students>
XSL文档:
<?xml version= "1.0 " encoding= "gb2312 "?>
<xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform ">
<xsl:template match= "/ ">
<html>
<head>
<title> 你好 张三 </title>
</head>
</xsl:template>
<xsl:template match= "name ">
<body>
<xsl:value-of select= "name "/>
<xsl:value-of select= "age "/>
</body>
</xsl:template>
</xsl:stylesheet>
搞太不清楚了....望指教 谢谢
------解决方案--------------------
xsl是用来解析xml文件的,是xsl寻找匹配,始终如此。
<xsl:template match= "/ ">
可以说是一个程序的入口。
如果没有入口,那其他的
<xsl:apply-templates select= "xxx "/>
也是没有作用的。。。。
------解决方案--------------------
xml只是存数据的
相当于: xsl从xml中读数据,然后决定怎么显示,它输出的是html
这样够明白吧
------解决方案--------------------
比如以下XSL文档中,匹配完了 <xsl:template match="/" >后是否还会匹配 <xsl:template match="name" >,之间没有使用 <xsl:apply-templates select="xxx"/ >,也没有使用类似的语句.
不会的,
你可以自己试试,到底结果如何,这样比较深刻
------解决方案--------------------
<xsl:template match="/" > 是入口
如果入口都没有近 那后面的语句肯定不会执行的
XML要被转成XSL样式的HTML,那么处理器肯定要读取这2个文件 XML 和 XSL.
XML的源文档被处理器读取后应该变成DOM树,XSL样式也被读取后成为DOM树,现在的问题是:
在匹配的时候,到底是谁匹配谁? 到底哪个是主动者(遍历的是XSL还是XML)
我从很多书上的例子中发现,好象是只要匹配了根节点 <xsl:template match= "/ "> ,程序执行的流程的交给了XSL了,接下去完全是 <xsl:apply-templates select= "xxx "/> 这类语句在导航程序的流程,最后完成了转换的任务.
---貌似是第1次匹配是XML主动匹配XSL,由XML里的根节点去找XSL里的根 <xsl:template match= "/ "> ,之后全是XSL在控制.
(即:仅仅匹配了一个源XML的根节点,之后所有的任务全由XSL里由根的模式所连带出来的一系列过程最后结束并完成了转换.但不应该是这样就结束了啊,源XML的根判断好了不是还要判断他下面的子节点吗?应该再让子节点再去XSL文件里找配对的xsl模板规则啊)
我在想:如果没有类似 <xsl:apply-templates select= "xxx "/> 这类导航语句,只存在 <xsl:template match= "xxx "> 这类模板规则,处理器是否会从源XML的DOM树里从根节点开始依次拿出各个节点来,看是否能找到XSL里对应的模板规则来匹配,从而得到HTML呢?
比如:
XML文档:
<students>
<student>
<name> 张三 </name>
<age> 18 </age>
</student>
</students>
XSL文档:
<?xml version= "1.0 " encoding= "gb2312 "?>
<xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform ">
<xsl:template match= "/ ">
<html>
<head>
<title> 你好 张三 </title>
</head>
</xsl:template>
<xsl:template match= "name ">
<body>
<xsl:value-of select= "name "/>
<xsl:value-of select= "age "/>
</body>
</xsl:template>
</xsl:stylesheet>
搞太不清楚了....望指教 谢谢
------解决方案--------------------
xsl是用来解析xml文件的,是xsl寻找匹配,始终如此。
<xsl:template match= "/ ">
可以说是一个程序的入口。
如果没有入口,那其他的
<xsl:apply-templates select= "xxx "/>
也是没有作用的。。。。
------解决方案--------------------
xml只是存数据的
相当于: xsl从xml中读数据,然后决定怎么显示,它输出的是html
这样够明白吧
------解决方案--------------------
比如以下XSL文档中,匹配完了 <xsl:template match="/" >后是否还会匹配 <xsl:template match="name" >,之间没有使用 <xsl:apply-templates select="xxx"/ >,也没有使用类似的语句.
不会的,
你可以自己试试,到底结果如何,这样比较深刻
------解决方案--------------------
<xsl:template match="/" > 是入口
如果入口都没有近 那后面的语句肯定不会执行的