2017-12-27 3 views
2

このStack Overflow answerから、のどのように一致するかを特定の文字列で始まるの属性値がわかります。Xで始まる名前の属性と一致するXPathクエリ

//*[@*[starts-with(., 'h')]]

私の質問はどのように名属性特定文字列で始まるを一致させることです。たとえば、値が文字hで始まると任意の属性を持つ要素のリストを見つけること?

私が理解しているように、@*は、任意の要素のより広い範囲の//*コレクション内の任意の属性に一致することを示します。 starts-with関数は、haystackと針の2つのパラメータをとり、. haystackは属性値を示します。私は自分の道の90%であるように感じますが、値ではなく、の属性名で一致する必要があるものを特定できません。

例は一致します

<example> 
    <first match-me="123">MATCH!</first> 
    <second do-not-match-me="456">NO MATCH!</second> 
    <third match-me-yes-please="789">MATCH!</third> 
    <fourth> 
     <fifth match-me:oh-yes>MATCH!</fifth> 
    </fourth> 
</example> 

答えて

3

「私はそこに私の方法の90%だように私は感じる」 - はい、最後のフェーズは、属性名のメソッド指定されています

//*[@*[starts-with(name(), 'match-me')]] 

注意を頼ります単純な属性名の照合では、match-me:oh-yes(コロンの内側)などの属性名を扱うときに問題が発生する可能性があります。そのような場合は、おそらくエラーThe prefix "match-me" for attribute "match-me:oh-yes" associated with an element type "fifth" is not boundまたはAttribute name "match-me:oh-yes" associated with an element type "fifth" must be followed by the ' = ' character.(「値なし」属性の場合)

関連する問題