首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素在相对路径和绝对路径下的xpath中找到,直到第二个子路径。

元素在相对路径和绝对路径下的xpath中找到,直到第二个子路径。
EN

Stack Overflow用户
提问于 2014-06-02 05:42:51
回答 1查看 918关注 0票数 0

抱歉,如果我对这件事很感兴趣的话。几天后,我刚刚开始使用xforms和xslt,现在我无法克服xform。我试图将其转换为html,并使用此块检索默认值,以便首先搜索数据元素。

代码语言:javascript
复制
<xsl:if test="not(/h:html/h:head/model/instance/data)">
        no data found
    </xsl:if>

它打印“没有找到的数据”,但是如果我把它放在从h:head开始的逐个子元素的搜索中,它就表示找到了。

代码语言:javascript
复制
<xsl:for-each select="/h:html/h:head/*">
    <xsl:if test="name(.) = 'model'">
        model/
        <xsl:for-each  select="./node()">           
            <xsl:if test="name(.) = 'instance'">
                instance/
                <xsl:for-each  select="./node()">
                    <xsl:if test="name(.) = 'data'">
                    data/ found!
                    </xsl:if>
                </xsl:for-each >
            </xsl:if>
        </xsl:for-each >
    </xsl:if>
</xsl:for-each>

我的xform看起来像这样

代码语言:javascript
复制
<?xml-stylesheet type="text/xsl" href="display.xsl"?>
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jr="http://openrosa.org/javarosa">
  <h:head>
    <h:title><![CDATA[Form Title]]></h:title>
    <model>
      <instance>
        <data>
          <start/>
          <end/>
          <today/>
          <phonenumber/>
          <mobilekey/>
          <projectkey/>
...
      </data>
      </instance>
      <itext> ...</itext>
...<bind> s..
</model>
</h:head>
  <h:body>

根据我的xform,数据应该在/h:html/h:head/model/实例/ data,对吗?我在Firefox 29.0.1上看到了这些

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-02 06:11:43

这是因为您有一个默认的命名空间xmlns="http://www.w3.org/2002/xforms"

xslt:

代码语言:javascript
复制
<xsl:if test="not(/h:html/h:head/model/instance/data)">
    no data found
</xsl:if>

将打印no data found,因为xpath在无命名空间节点中查找model/instance/data

要正确访问它们,需要在XSLT中声明默认名称空间:

代码语言:javascript
复制
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:h="http://www.w3.org/1999/xhtml"
    xmlns:zzz="http://www.w3.org/2002/xforms">

并将xpath更改为:

代码语言:javascript
复制
/h:html/h:head/zzz:model/zzz:instance/zzz:data

或者,您可以使用以下xpath:

代码语言:javascript
复制
<xsl:if test="not(/h:html/h:head/*[local-name() = 'model']/*[local-name()='instance']/*[local-name()='data'])">
    no data found
</xsl:if>

local-name()函数将访问节点名和名称空间。

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

https://stackoverflow.com/questions/23987967

复制
相关文章

相似问题

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