2016-03-16 109 views
1

我正在寫一個java程序來搜索文本並返回其節點信息。xpath獲取節點信息的xpath

  1. 該程序應搜索文檔中的任何位置的文本。
  2. 返回5個預定義的節點和節點值。

示例XML文件: -

<project xmlns="https://example.hoom/go/bing"> 
    <name>purchaseOrder </name> 
    <property name="included" type="hidden">true</property> 
    <locales> 
     <locale>en</locale> 
     <locale>hi</locale> 
    </locales> 
    <defaultLocale>en</defaultLocale> 
    <gamespace> 
     <name locale="en">hambook</name> 
     <name locale="de">hambook</name> 
     <lastChanged>2014-03-05T18:47:30</lastChanged> 
     <lastChangedBy>userx</lastChangedBy> 
     <property name="included" type="hidden">true</property> 
     <gamespace> 
      <name locale="en">DbBook</name> 
      <name locale="zw">DbBook</name> 
      <hecrotSubject status="valid"> 
       <name locale="en">hexValue</name> 
       <name locale="zw">hexValue</name> 
       <hecrotItem> 
        <name locale="en">hireValue</name> 
        <name locale="zw">hireValue</name> 
        <hello>searchTerm</hello> 
       </hecrotItem> 
      </hecrotSubject> 
     </gamespace> 
    </gamespace> 
    <gamespace> 
     <name locale="en">Names</name> 
     <lastChanged>2016-01-12T12:42:46</lastChanged> 
     <gamespace> 
      <name locale="en">Database Layer</name> 
      <name locale="zw">Database Layer</name> 
      <hecrotSubject status="valid"> 
       <name locale="en">qsxyz</name> 
       <hecrotItem> 
        <name locale="en">myName</name> 
        <hello>...Hi there..</hello> 
       </hecrotItem> 
      </hecrotSubject> 
     </gamespace> 
    </gamespace> 
</project> 

我現在的XPath是: -

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

這是隻給使用xpath.compile().evaluate()根標籤。 儘管我需要的結果是

如果五個預定義節點包含搜索文本(本示例xml中的searchTerm),則其名稱值爲。

樣品的結果應該是: -

項目 - purchaseOrder的

遊戲空間 - hambook

遊戲空間 - DbBook

hecrotSubject - hexValue

hecrotItem - hireValue

編輯

我使用下面的語句在Java中: -

String expression = Xpath; 
Strings vals = xPath.compile(expression).evaluate(xmlDocument); 
System.out.println(vals); 
+1

你已經做了什麼?你卡在哪裏? –

+0

我在java中使用followin語句: - String expression = Xpath; 字符串vals = xPath.compile(表達式).evaluate(xmlDocument); System.out。的println(瓦爾斯); – user2816085

+0

你有無效的xpath查詢(通過xmlspy檢查),獲取名稱'''/項目/遊戲空間/名稱'',獲得hecroSubject:'''/ project/gamespace/gamespace/hecrotSubject''' –

回答

0

我不知道爲什麼你只得到根標籤
但在你的xpaht中,某些值(節點名稱)的情況是錯誤的。修復hecrotSubject和hecrotItem,它應該工作。
不過順便說一下,我不明白你爲什麼要使用本地名稱與建立正確的名稱空間類似於下面的東西也應該這樣做:

/b:gamespace/b:hecrotsubject/b:hecrotitem[contains(., 'searchTerm')]/ancestor-or-self::*/b:name[@locale='en']" 

更新能源部更新問題

主要問題是您需要遍歷NodeList,這可能由xpath evaluate返回。

看看例如:How to read XML using XPath in Java

+0

我在java中使用followin語句: - String expression = Xpath; 字符串vals = xPath.compile(表達式).evaluate(xmlDocument); System.out.println(vals); – user2816085

+0

而且它僅打印一個值 – user2816085

+0

請參閱編輯以瞭解詳細信息...... – user2816085