2017-03-31 7 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

必要なテキストで使用されていないと仮定して、任意の文字fe spaceとsemicolonを最初に削除してから、translate()関数を使用して、結果が必要なテキスト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))]"); 

は私の古い記事でXPathからPHPの関数を呼び出す方法を示す完全な例を参照してください。 :Get hrefs that match regex expression using PHP & XPath