繁体   English   中英

为什么xpath位置选择表达式会返回多个节点?

[英]Why would an xpath position selection expression return multiple nodes?

在使用xpath(时间不长)时,我遇到了一些奇怪的事情。

xml的缩短版本(完整的xml在这里,并且在pastebin上有一个快照):

<?xml version="1.0" encoding="utf-8" ?> 
<body copyright="All data copyright San Francisco Muni 2013.">
  <route tag="all">
    <message id="10268" creator="jflynn" startBoundary="1378121400000" startBoundaryStr="Mon, Sep 02 04:30:00 PDT 2013" endBoundary="1378191540000" endBoundaryStr="Mon, Sep 02 23:59:00 PDT 2013" sendToBuses="false">
      <text>Sunday schedules today.</text>
    </message>
  </route>
  <route tag="44">
    <message id="10221" creator="mlee" startBoundary="1377525600000" startBoundaryStr="Mon, Aug 26 07:00:00 PDT 2013" endBoundary="1382857140000" endBoundaryStr="Sat, Oct 26 23:59:00 PDT 2013" sendToBuses="false">
      <routeConfiguredForMessage tag="44">        <stop tag="6420" title="Silver Ave &amp; Revere Ave" />
</routeConfiguredForMessage>
      <text>Stop moved&#10;across Revere&#10;During&#10;Construction</text>
    </message>
    <message id="10222" creator="mlee" startBoundary="1377525600000" startBoundaryStr="Mon, Aug 26 07:00:00 PDT 2013" endBoundary="1382857140000" endBoundaryStr="Sat, Oct 26 23:59:00 PDT 2013" sendToBuses="false">
      <routeConfiguredForMessage tag="44">        <stop tag="6420" title="Silver Ave &amp; Revere Ave" />
</routeConfiguredForMessage>
      <text>Stop moved&#10;across Revere&#10;During&#10;Construction</text>
    </message>
  </route>
</body>

表达方式

//route[1]

像我预期的那样返回第一个route节点。 但是,在尝试选择第一个message节点时,使用

//message[1]

返回了多个message节点而不是一个。

起初我认为这是一个平台问题,但在Android,桌面Java和几个在线xpath测试仪上进行测试,我得到了相同的结果。

可能是什么问题呢?

两个表达式分别代表其父级的第一个routemessage子级。 1你所有的route都是兄弟姐妹共享一个body父母,所以第一个被返回,只有那个。 但是,每个route包含自己的一组message子节点,其中第一个message子节点将为每个route节点返回。

如果需要匹配整个XML文档中的第一个message元素,请使用:

(//message)[1]

括号告诉处理器找到匹配//message节点,然后在选择这些节点中的第一个之后出现[1]谓词。 没有它们, [1]谓词将简单地基于其父节点的子节点进行操作。


1 因为我是一个CSS选择器junkie:XPath表达式的选择器副本分别是route:nth-of-type(1)message:nth-of-type(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM