下面是一个我想用XSLT:解析的xml文件
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="myXSLTSheet.xsl" ?>
<us:TopLevelTag xmlns:ut='http://www.umbrellacorp.com/oagis/1' xmlns:ot='http://www.openapplications.org/oagis/9' >
<ut:SecondLevelTag>
<ut:ThirdLevelTag>
</ut:ThirdLevelTag>
</ut:SecondLevelTag>
<ut:SecondLevelTag>
<ut:ThirdLevelTag>
<ut:FourthLevelTag>
<ot:FifthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing1</ot:SeventhLevelTag>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing2</ot:SeventhLevelTag>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing3</ot:SeventhLevelTag>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing4</ot:SeventhLevelTag>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing5</ot:SeventhLevelTag>
</ot:SixthLevelTag>
</ot:FifthLevelTag>
<ot:FifthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag2>Thing6</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing7</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing8</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing9</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing10</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing11</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing12</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing13</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing14</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing15</ot:SeventhLevelTag2>
</ot:SixthLevelTag>
</ot:FifthLevelTag>
</ut:FourthLevelTag>
</ut:ThirdLevelTag>
</ut:SecondLevelTag1>
</us:TopLevelTag>
以下是要进行解析的xlst文件:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version ="1.0"
xmlns:ut="http://www.umbrellacorp.com/oagis/1" xmlns:ot="http://www.openapplications.org/oagis/9" >
<xsl:template match="/">
<xsl:call-template name="spec1">
<xsl:with-param name="match" select="ut:TopLevelTag/ut:SecondLevelTag[1]/ut:ThirdLevelTag[100]/ut:FourthLevelTag[1]/ot:FifthLevelTag[1]" />
</xsl:call-template>
</xsl:template>
<xsl:template match="/" name="spec1">
<xsl:param name="match" />
<xsl:for-each select="$match/ot:SixthLevelTag">
Value: <xsl:value-of select="ot:SeventhLevelTag"/><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请帮忙,xslt文件没有返回任何内容。我认为模板的"match"属性可能设置错误,或者我使用的"param"变量不正确。
我假设您的us:TopLevelTag
是ut:TopLevelTag
。
ut:TopLevelTag/ut:SecondLevelTag[1]/ut:ThirdLevelTag[100]
不匹配,因为ut:TopLevelTag/ut:SecondLevelTag[1]
是一个与ut:ThirdLevelTag
完全相同的元素。因此,整个xslt表达式不匹配。
作为一个一般的指导原则,尝试同时对完整的路径进行编码通常既没有必要,也不一定是一个好主意。我不知道你在上面到底想达到什么目的(我的猜测是,你应该尝试更小的例子来发布问题),但可能值得取消长匹配,只检查<xsl:for-each select='.//ot:SixthLevelTag'>
。
您需要从第二个模板中删除match属性,否则这是一个错误(模板将自动使用空参数调用。)然后,如果您清理示例xml中的混乱(使关闭标记与打开标记匹配,使用有效的命名空间前缀等),它就会起作用。
这个有很多问题。首先,您的XML格式不正确(请参阅Thing1等),并且有一个未声明的名称空间前缀"us"。为了创建一个有效的xml文档,我更改了一些内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="myXSLTSheet.xsl" ?>
<ut:TopLevelTag xmlns:ut='http://www.umbrellacorp.com/oagis/1' xmlns:ot='http://www.openapplications.org/oagis/9' >
<ut:SecondLevelTag>
<ut:ThirdLevelTag>
</ut:ThirdLevelTag>
</ut:SecondLevelTag>
<ut:SecondLevelTag1>
<ut:ThirdLevelTag>
<ut:FourthLevelTag>
<ot:FifthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing1</ot:SeventhLevelTag1>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing2</ot:SeventhLevelTag1>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing3</ot:SeventhLevelTag1>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing4</ot:SeventhLevelTag1>
</ot:SixthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag1>Thing5</ot:SeventhLevelTag1>
</ot:SixthLevelTag>
</ot:FifthLevelTag>
<ot:FifthLevelTag>
<ot:SixthLevelTag>
<ot:SeventhLevelTag2>Thing6</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing7</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing8</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing9</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing10</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing11</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing12</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing13</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing14</ot:SeventhLevelTag2>
<ot:SeventhLevelTag2>Thing15</ot:SeventhLevelTag2>
</ot:SixthLevelTag>
</ot:FifthLevelTag>
</ut:FourthLevelTag>
</ut:ThirdLevelTag>
</ut:SecondLevelTag1>
</ut:TopLevelTag>
我继续简化了xslt:调用模板对于你想要做的事情来说是不必要的,这就是获得所有的SeventhLevelTags:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version ="1.0"
xmlns:ut="http://www.umbrellacorp.com/oagis/1" xmlns:ot="http://www.openapplications.org/oagis/9" >
<xsl:template match="/">
<xsl:for-each select="//ot:SeventhLevelTag">
Value: <xsl:value-of select="."/><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在浏览器中运行这个程序应该会给你想要的东西。