2017-03-31 13 views
0

我想找到:XPath表達式:可選字符?

<div style="text-align:center;" > 
<div style="text-align: center;" > 
<div style="text-align:center" > 
<div style="text-align: center" > 

所以之前中心可選空間,並在最後一個可選的分號。

我可以這樣做:

//div[@style=’text-align:center;’ or @style=’text-align: center;’ or @style=’text-align:center’ or @style=’text-align: center’] 

但有一個「乾淨」的方式?並能夠採取更多的可選角色,而不會太長?

+0

大概你在XPath 1.0中,否則你只會使用matches()?但是,如果您需要XPath 1.0解決方案,請說*。 –

+0

@MichaelKay我不知道,我使用PHP 5.6.23,並計劃儘快升級到7。我看到的唯一的東西是:DOM/XML API版本20031129,libxml版本2.9.4,啓用了HTML支持,啓用了XPath支持。 – Vixxs

+0

這是版本1.0。令人遺憾的是PHP中的XML庫沒有跟上最新的標準。我們正試圖通過爲Saxon/C提供一個PHP接口來糾正這個問題。 –

回答

1

使用translate()函數,您可以先刪除可選字符fe空格和分號(假設它們未在所需文本中使用),然後檢查結果是否僅等於所需文本fe'text-align:center' :

//div[translate(@style, ' ;', '') = 'text-align:center'] 

或者,當模式變得更加複雜,你可以通過PHP preg_match在你的XPath使用正則表達式:

$xp->query("//div[php:function('preg_match', '~text-align:\s*center;*~', string(@style))]"); 

查看完整的例子演示瞭如何在我較早的帖子調用PHP函數從XPath的:Get hrefs that match regex expression using PHP & XPath