使用2级XML查找节点并添加字符串

时间:2017-09-29 13:30:35

标签: python xml xpath lxml plist

我有一个用lxml解析过的plist。感谢用户的帮助,我有一整套要添加的项目,格式正确,可以添加。我现在遇到的麻烦是使用2个不同级别的xml文件来选择放置它的位置。如果我有以下内容,我怎么能确保将我的文字插入" WUT"在使用" Notes"的集合中和" 13",而不是"图书"和" 13"?或者反过来?

<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)

但数据仅在最后一次&#34; 13&#34;之后插入。而不是我想要定义的那个。

1 个答案:

答案 0 :(得分:1)

在python中有一个很好的用于解析XML的库,名为BeautifulSoup。请查看以下链接。

我确信这不是你想要的答案,但有时教一个人钓鱼会更好。