2016-02-29 38 views
0

我想找到一種方法來根據xpath表達式將大型xml文件分成塊。查找會產生相同父項的xpath表達式?

據我所知只有xpath表達式給出具有相同父節點的節點可用於將xml文件分成塊。如何檢測用戶輸入的xpath表達式是否會產生具有相同父項的節點?

例如,請考慮下面的XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<employees> 
    <employee> 
     <firstname>Asanka</firstname> 
     <lastname>Sanjeewa</lastname> 
     <address> 
      <no>No.123</no> 
      <road>Main Street</road> 
      <city>Negombo</city> 
     </address> 
    </employee> 
    <employee> 
     <firstname>Kamal</firstname> 
     <lastname>Silva</lastname> 
     <address> 
      <no>No.123</no> 
      <road>Main Street</road> 
      <city>Negombo</city> 
     </address> 
    </employee> 
    <employee> 
     <firstname>Roshan</firstname> 
     <lastname>Fernando</lastname> 
     <address> 
      <no>No.123</no> 
      <road>Main Street</road> 
      <city>Negombo</city> 
     </address> 
    </employee> 
</employees> 

如果給我XPath表達式://員工/員工/姓,從這個公式計算所得的節點產生具有不同的父母名字的節點。但是,如果我給了xpath表達式// employees/employee,則生成的節點具有相同的父節點。我如何檢測這樣的xpath表達式,它給出了具有相同父節點的節點?

+0

你在問什麼。讓我問你,爲什麼? –

+0

「我試圖找到一種方法來根據xpath表達式將一個大的xml文件分成塊。據我所知,只有xpath表達式可以使用具有相同父項的節點將xml文件分成塊。」 –

回答

2

獲取用戶輸入的XPath表達式,並將其放在括號中。然後將/..添加到最後,並將所有內容包裝在count函數中。這將爲您提供從原始查詢返回的不同父元素的數量。如果答案是一個,你知道生成的節點有相同的父節點。如果答案不止一個,那麼您知道不能通過給定的XPath表達式來分割XML。

例子:

  • 輸入://employees/employee/firstname變成count((//employees/employee/firstname)/..)並給出結果3
  • 輸入://employees/employee變成count((/employees/employee)/..),並給出結果1

從這些例子中,你會看到將原始XPath表達式括在括號中似乎沒有必要,但除非您知道用戶不會輸入表達式如//firstname | //employee,那麼它很重要,否則它不能正確計算結果中父母的數量。

+0

謝謝。這很有幫助 –