2011-04-19 45 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']/