2017-02-26 12 views
0

私は特定のパターンに従う子孫を持つxmlノードを見つけるためにxpathを書こうとしています。私は、次のXMLを持っている場合たとえば、:特定のパターンの下にノードを見つけるXPathはありますか?

<While> 
    <Condition> 
    <ID val="shouldLoop"/> 
    </Condition> 
    <Assign> 
    <ID val="StringVariable1"/> 
    <Parens> 
     <Parens> 
     <String val="StringLiteral"/> 
     </Parens> 
    </Parens> 
    </Assign> 
    <Assign> 
    <ID val="StringVariable2"/> 
    <String val="StringFigurative"/> 
    </Assign> 
    <Assign> 
    <ID val="StringVariable3"/> 
    <Add> 
     <String val="StringLiteral"/> 
     <String val="StringFigurative"/> 
    </Add> 
    </Assign> 
</While> 

私は、3「割り当て」ノードの最初の2を取得したいと思い0または内にネスト「文字列」ノードの子ノードを持つそれらに基づきますより多くの "Parens"タグ。

"(Parens /)* String"のような正規表現の場合と同様にこれを実現するxpathは "String"と "Parens/Parens/String"の両方に一致しますか?

+0

'//割り当て[文字列|括弧//文字列]の結果をお知らせ' 'STRING'の子を持つか' Parens'の子を持つ 'Assign'が見つかります任意の 'String'子孫を伴います。 ' ...'も一致しますので正確ではありません。 – tdelaney

答えて

0

XPathの下に試してみて、私は

//Assign[//Parens[String] or String][position()<3] 
+0

このxpathは、子孫としてStringまたはParens/Stringノードを持つすべてのAssignとマッチし、最初の2つを返すように見えます。例のXMLのAssignノードが異なる順番であった場合、StringVariable1とStringVariable2ではAssignsを返すが、StringVariable3では返さないようにしたい。 私は何もしないでAssignsを返すxpathか、それらとString descendantノードの間のParensだけを探しています。 StringVariable3のAddノードはそのパターンを破るため、除外する必要がありますが、残りは一致する必要があります。 – user2917486

+0

'のようなものがありますか?あなたもこれにマッチしたくないですよね? – Andersson

+0

右。 は一致しません。 – user2917486

関連する問題