2016-04-11 8 views
2

私の現在のXPathは、条件を満たすノードancestor-or-selfを返します。2つの条件付きのXPath 1.0リターンノード

//*[contains(., '"& v_search &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en'] 

は今、私は一致するノードからfollowing-siblingを返すために、追加の機能を実装したいです。私は以下のようにXPathを変更しました。しかし、それは結果に祖先 - または - 自己と兄弟を返すことはありません。

//*[contains(., '"& v_search &"')]/ancestor-or-self::*/following-sibling::*/*[local-name()='name' and @locale='en'] 

ここで、v_searchはテスト用の任意の文字列で置き換えることができる変数です。 私のXMLは次のようである: -

<root xmlns="https://jlkjsdlfjl/"> 
    <name>Accounts</name> 
    <property name="included" type="hidden">true</property> 
    <locales> 
     <locale>en</locale> 
     <locale>de</locale> 
    </locales> 
    <defaultLocale>en</defaultLocale> 
    <searchspace> 
     <name locale="en">Accounts</name> 
     <name locale="de">Accounts</name> 
     <lastChanged>2014-03-05T18:47:30</lastChanged> 
     <lastChangedBy>userx</lastChangedBy> 
     <property name="included" type="hidden">true</property> 
     <searchspace> 
      <name locale="en">Database L</name> 
      <name locale="zw">Database L</name> 
      <searchSubject status="valid"> 
       <name locale="en">SName1</name> 
       <name locale="zw">qskxyz</name> 
       <searchItem> 
        <name locale="en">IName1</name> 
        <name locale="zw">qixyz</name> 
        <hello>v_search</hello> 
       </searchItem> 
       <searchItem> 
        <name locale="en">IName2</name> 
        <name locale="zw">abc</name> 
        v_search 
       </searchItem> 
       <searchItem> 
        <name locale="en">IName3</name> 
        <name locale="zw">def</name> 
        <hello>something else</hello> 
       </searchItem> 
      </searchSubject> 
     </searchspace> 
    </searchspace> 
    <searchspace> 
     <name locale="en">Names</name> 
     <lastChanged>2016-01-12T12:42:46</lastChanged> 
     <searchspace> 
      <name locale="en">Database Layer</name> 
      <name locale="zw">Database Layer</name> 
      <searchSubject status="valid"> 
       <name locale="en">SName2</name> 
       <searchItem> 
        <name locale="en">IName4</name> 
        <hello>...Hi there..</hello> 
       </searchItem> 
      </searchSubject> 
     </searchspace> 
    </searchspace> 
</root> 

v_searchはサンプルのキーワードである、私は最低の一致するノードの兄弟を返すようにしたいです。 、つまり自己の兄弟はancestor-or-selfです。

+0

、それは-sibling'以下の '明確ではありませんあなたが意味する要素はどれですか?マッチング要素の 'following-sibling'またはマッチング要素の祖先の' following-sibling'? – har07

+0

キーワードと上記のXMLを使って選択すると予想されるサンプルのキーワードと要素を提供すると助けになるかもしれません。 – har07

+0

最後の行を編集 –

答えて

1

最も簡単な方法は、一致する要素の 'following-sibling'を返す2番目の式を導入することです。

//*[contains(., 'v_search')] 
/ancestor-or-self::* 
/*[local-name()='name' and @locale='en'] 
    | 
//*[text()[contains(.,'v_search')]] 
/following-sibling::* 
/*[local-name()='name' and @locale='en'] 

を簡単なテスト:あなたは(読みやすいように改行)、次のように労働組合(|)演算子を使用して、既存の1と2番目の式を組み合わせることができ、現在http://www.xpathtester.com/xpath/294a1ef49d30eb6abecf2f024cfcd318

+0

私たちはXpathに演算子や演算子を使うことができます。 –

+0

ありがとう私は初心者です。だから私はこれを考えることができませんでした。再度、感謝します... –

関連する問題