首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一次使用XSLT:调用模板,带-param,XPath位置路径

第一次使用XSLT:调用模板,带-param,XPath位置路径
EN

Stack Overflow用户
提问于 2012-03-30 02:52:41
回答 3查看 791关注 0票数 0

下面是我希望用XSLT解析的xml文件:

代码语言:javascript
复制
<?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文件:

代码语言:javascript
复制
<?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”变量。

EN

回答 3

Stack Overflow用户

发布于 2012-03-30 03:10:44

我假设你的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'>

票数 0
EN

Stack Overflow用户

发布于 2012-03-30 03:17:38

您需要从第二个模板中删除match属性,否则这是一个错误(该模板将被自动调用,参数为空)。然后,如果您清理了示例xml中的乱七八糟的东西(使结束标记与开始标记匹配,使用有效的名称空间前缀等),它就会起作用。

票数 0
EN

Stack Overflow用户

发布于 2012-03-30 03:28:49

这个应用程序有很多问题。首先,您的XML格式不正确(请参阅Thing1等人),并且存在未声明的名称空间前缀"us“。为了创建一个有效的xml文档,我做了一些更改:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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>

在浏览器中运行它应该会得到您想要的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9931612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档