2017-09-29 60 views
1

我有一个plist,我用lxml解析过。感谢这里用户的帮助,我有一整套我想要添加的项目,格式正确,并且可以添加它们。我现在遇到的麻烦是使用2个不同级别的xml文件来选择放置它的位置。如果我有以下内容,我怎么能确定将我的文本插入到同时使用“注释”和“13”,而不是“书籍”和“13”的设置中的“WUT”?或者相反呢?使用2个级别的XML查找节点并添加字符串

<root> 
    <key>Title</key> 
    <dict> 
    <key>Set</key> 
    <dict> 
     <key>Notes</key> 
     <dict> 
     <key>Tester</key> 
     <array> 
      <dict> 
      <key>13</key> 
      <dict> 
       <key>Param</key> 
       <array> 
       <string>WUT</string> 
       </array> 
      </dict> 
      <key>18</key> 
      <dict> 
       <key>Param</key> 
       <array> 
       <string>WUT</string> 
       </array> 
      </dict> 
      </dict> 
     </array> 
     </dict> 
    </dict> 
    <dict> 
     <key>Books</key> 
     <dict> 
     <key>Tester</key> 
     <array> 
      <dict> 
      <key>13</key> 
      <dict> 
       <key>Param</key> 
       <array> 
       <string>WUT</string> 
       </array> 
      </dict> 
      </dict> 
     </array> 
     </dict> 
    </dict> 
    </dict> 
</root> 

所以最好我的新的plist会是什么样子:

<root> 
    <key>Title</key> 
    <dict> 
    <key>Set</key> 
    <dict> 
     <key>Notes</key> 
     <dict> 
     <key>Tester</key> 
     <array> 
      <dict> 
      <key>13</key> 
      <dict> 
       <key>Param</key> 
       <array> 
       <string>1</string> 
       <string>2</string> 
       <string>3</string> 
       <string>4</string> 
       <string>5</string> 
       </array> 
      </dict> 
      <key>18</key> 
      <dict> 
       <key>Param</key> 
       <array> 
       <string>WUT</string> 
       </array> 
      </dict> 
      </dict> 
     </array> 
     </dict> 
    </dict> 
    <dict> 
     <key>Books</key> 
     <dict> 
     <key>Tester</key> 
     <array> 
      <dict> 
      <key>13</key> 
      <dict> 
       <key>Param</key> 
       <array> 
       <string>WUT</string> 
       </array> 
      </dict> 
      </dict> 
     </array> 
     </dict> 
    </dict> 
    </dict> 
</root> 

我一直在使用XPath和运行的尝试。

for plist_title in tree.xpath('//dict[key="Notes"][1]') 
    for plist_tester in plist_title.xpath('//dict[key="13"][1]') 
     plist_tester.insert(1,myData) 

但数据只在最后一个“13”后插入,而不是我想定义的那个。

+0

无法重现。请发布[mcve]。我在你的代码片段中添加的尝试将数据放在正确的位置。 –

回答