【问题标题】:PHP xpath check for div style and its valuePHP xpath 检查 div 样式及其值
【发布时间】:2014-08-14 20:50:59
【问题描述】:

我正在尝试使用 php 和 xpath 为两件事解析一个 html 文件/字符串。

<DIV STYLE="top:110px; left:1280px; width:88px" Class="S0">Aug30</DIV>

我试图在知道样式顶部和左侧值(此处:110px 和 1280px)的情况下寻找未知值(此处:Aug30)。

反之亦然。我知道 Aug30 的值,但想获取其顶部和左侧的值。

也许 XPATH 不是最好的方法。关于如何解决我的问题的任何想法?

提前感谢您的帮助!

【问题讨论】:

  • 两者都有contains()函数,第一个在属性上,获取那个节点的字符串内容,第二个contains()在字符串内容上,只返回整个属性&解析用 PHP 从左到上,尝试用 XPath 做到这一点是困难和麻烦的,这是一种合理的方法。

标签: php xpath


【解决方案1】:

要通过 XPath 中的 style 属性值过滤 &lt;div&gt; 元素,您可以执行以下操作:

//div[contains(@style, 'top:110px') and contains(@style, 'left:1280px')]

XPath 上方将搜索具有style 属性值的&lt;div&gt; 节点包含两个特定字符串。

据我所知,XPath 1.0 不支持其他要求。我们可以获取style属性的全部值,但是获取其中的一部分是死路一条。我们可以使用一些字符串函数,即使不支持返回函数的结果。

您需要使用 XPath 2.0 或使用宿主编程语言(在本例中为 PHP)来执行此操作。

【讨论】:

  • returning a function's result isn't supported 是什么意思?这当然是支持的,例如取 fn:concat(...) ,它将返回一个 xs:string ,因此是一个函数结果,可以返回。
  • 嗯..我的意思是//div[x='Aug30']/substring(...)。在这种情况下你是对的,因为只有单个节点传递给函数
  • 我还是不明白。 XPath 1.0 不支持作为路径步骤的函数,但您可以轻松地做到substring(//div[x='Aug30'], 1, 1)。此外,您不限于单个节点,当然,如果函数签名需要,您可以将多个节点传递给函数。我真的不明白你想说什么,这对我来说似乎是公然错误的。
  • 谢谢。有时它可以那么容易。我尝试了很多更复杂的解决方法。
  • @dirkk 对不起,如果你不清楚,编一个好的英文句子对我来说是一项艰巨的工作:) 我的意思是如果你有多个节点匹配 //div[x='Aug30'], substring()只会在第一个匹配的节点上操作,可能会造成混乱
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多