2016-12-21 6 views
0

XPath形式の入力を識別する解決策を考え出すことができます。入力がXPath構文であるかどうかを確認するための正規表現の記述

//*[@id="" or @text="i love stackoverflow" or @name="oh yea" or @class=some-css-class"]

しかし、これと挑戦は、XPath値が急激に変化できることです:の入力は、このような何かを見ることができるとしましょう。ご提案があれば教えてください!

ありがとうございます!

+0

代替入力フォーマットは何ですか? '.'は有効なXPath式ですが、ファイルシステム参照や正規表現パターンのために混乱する可能性があります –

+0

これは私が扱っている問題です。入力フォーマットの約80%は、 '// * @@ =" lga "または@class =" "]' または 'https://www.amazonのようになります。 com/' – richdotjs

答えて

2

あなたは、入力文字列がそうのように、有効なXPath式であるかどうかをテストできます。

$string = '//*[@id="" or @text="i love stackoverflow" or @name="oh yea" or @class="some-css-class"]' 
try{ 
    $null = [System.Xml.XPath.XPathExpression]::Compile($string) 
    # $string is valid XPath 
} 
catch { 
    # $string is not valid XPath 
} 
+0

ありがとうございました!私はSystem.Xml.XPathクラスがあることを知らなかった! – richdotjs

1

あなたはここに注意する必要があるいくつかのコンピュータ科学の理論があります。正規表現は、文法の限られたクラスに対してのみ文を解析することができ、XPathの文法はそのクラスに合うには複雑すぎます。 XPathの簡単なサブセットを認識することができますが、これは便利なXPathパーサーを使用して、その式が有効であるかどうかを確認することです。 (また、宣言されていない変数参照や名前空間接頭辞など、XPathが意味的に有効かどうかについて考える必要があります)

+1

マイケルマイケルに感謝します。 – richdotjs

関連する問題