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

Xml 在xpath中的相对路径和绝对路径下找到元素,直到第二个子项,xml,xslt,xpath,Xml,Xslt,Xpath,对不起,如果我不知道的话。几天后我才开始使用xforms和xslt,现在我无法理解XFormXPath。我试图将其转换为html,并使用此块检索默认数据值,以便首先搜索数据元素 <xsl:if test="not(/h:html/h:head/model/instance/data)"> no data found </xsl:if> 没有找到任何数据 它打印“未找到数据”,但如果我把它放在从h:head开始的子元素之后搜索所述元素子元素,它

对不起,如果我不知道的话。几天后我才开始使用xforms和xslt,现在我无法理解XFormXPath。我试图将其转换为html,并使用此块检索默认数据值,以便首先搜索数据元素

<xsl:if test="not(/h:html/h:head/model/instance/data)">
        no data found
    </xsl:if>

没有找到任何数据
它打印“未找到数据”,但如果我把它放在从h:head开始的子元素之后搜索所述元素子元素,它会说它找到了

<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看起来像这样

<?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>

...
...
... s
根据我的xform,数据应该是/h:html/h:head/model/instance/data对吗?
我在Firefox 29.0.1上查看这些,这是因为您有一个默认名称空间
xmlns=”http://www.w3.org/2002/xforms“

您可以使用xslt:

<xsl:if test="not(/h:html/h:head/model/instance/data)">
    no data found
</xsl:if>
并将xpath更改为:

/h:html/h:head/zzz:model/zzz:instance/zzz:data
或者,您可以使用以下xpath:

<xsl:if test="not(/h:html/h:head/*[local-name() = 'model']/*[local-name()='instance']/*[local-name()='data'])">
    no data found
</xsl:if>

没有找到任何数据

local-name()。。。这使得每个节点都以zzz作为前缀。现在一切都清楚了。谢谢
<xsl:if test="not(/h:html/h:head/*[local-name() = 'model']/*[local-name()='instance']/*[local-name()='data'])">
    no data found
</xsl:if>