2011-04-19 46 views
0

IM試圖從以下XML結構的整數值(其只對文件的一部分)如何從這個XML結構

我需要得到00/PKW /柴油的價值得到的XPath/PM0 /整數,但我不知道如何在這之後搜索...

<plist version="1.0"> 
<dict> 
<key>00</key> 
<dict> 
    <key>pkw</key> 
    <dict> 
     <key>gas</key> 
     <integer>0</integer> 
     <key>diesel</key> 
     <dict> 
      <key>ohne</key> 
      <integer>0</integer> 
      <key>pm01</key> 
      <integer>0</integer> 
      <key>pm0</key> 
      <integer>0</integer> 
      <key>pm1</key> 
      <integer>0</integer> 
      <key>pm2</key> 
      <integer>0</integer> 
      <key>pm3</key> 
      <integer>0</integer> 
      <key>pm4</key> 
      <integer>0</integer> 
      <key>pm5</key> 
      <integer>4</integer> 
     </dict> 
     <key>otto</key> 
     <integer>0</integer> 
    </dict> 
</dict> 

願你有一個想法?

問候 浮動

編輯:

這正常工作:

/plist/dict/key[.=01]/following-sibling::*[1]/key[.='pkw']/following-sibling::*[1]/key[.='diesel']//following-sibling::*[1]/key[.='pm01']//following-sibling::*[1] 

但我不知道這是很好的XPath語法;-)到

+2

誰想出了這個XML規範?提出這個問題的人真的沒有最好的想法如何搜索它......我想它只能通過專門的軟件按順序讀取。 – 2011-04-19 11:02:34

+0

這是一個來自iphone應用程序的plist文件,用於finedust計算。我不想在android中使用它。 – float 2011-04-19 11:07:45

+0

解決方案可能是: /plist/dict/key[.=01]/following-sibling::*[1]/key[.='pkw']/following-sibling::*[1]/key [。='diesel'] // following-sibling :: * [1]/key [。='pm01'] // following-sibling :: * [1] – float 2011-04-19 11:09:13

回答

0

的一種方式做到以下幾點:

/plist/dict/key[. = '00']/../dict/key[. = 'pkw']/../dict/key[. = 'diesel']/../dict/key[. = 'pm0']/following-sibling::integer[1] 

您可以看到結果here。正如你可以看到這是一個非常愚蠢的表達。我可以使用更廣泛的following-sibling::...,但它取決於xml結構的精確程度。

另外你的問題:

/plist/dict/key[.=01]/following-sibling::*[1]/key[.='pkw']/following-sibling::*[1]/key[.='diesel']//following-sibling::*[1]/key[.='pm01']//following-sibling::*[1] 

就應該更換*與標籤的名稱。

+0

我不知道這應該看起來像... – float 2011-04-20 07:26:46

0

替換每個鍵(THE_KEY = 00, pwk, diesel, ...)dict[key/text()='THE_KEY']在你的 「例子的XPath」:

00/pkw/diesel/pm0/integer 

一個例子的結果應該是:

dict[key/text()='00']/dict[key/text()='pkw']/