[英]xpath in lxml for python get just a single node
我有这个xml文件。 我正在尝试将此处显示为1-7的数据组放入“数据”类别中。 使用Xpath时,我通常可以过滤到需要的位置,但是当我访问Con1时,似乎并没有给我那一组孩子,而是为我提供了与“ dict”相同级别的所有内容。
<dict>
<key>Tester</key>
<dict>
<key>Con1</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array>
<string>1</string>
<string>2</string>
<string>3</string>
<string>4</string>
<string>5</string>
<string>6</string>
<string>7</string>
</array>
</dict>
</dict>
<dict>
<key>15:15:3</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>7:15:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>7:15:1</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
<key>Con2</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>0:16:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>0:48:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
<key>Con3</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
</dict>
所以,如果我写:
myPath = '//dict[key/text()="Tester"]/dict[key/text()="Con1"][1]'
x = tree.xpath(myPath)
etree.tostring(x, pretty_print=True)
我会得到:
<dict>
<key>Con1</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array>
<string>1</string>
<string>2</string>
<string>3</string>
<string>4</string>
<string>5</string>
<string>6</string>
<string>7</string>
</array>
</dict>
</dict>
<dict>
<key>15:15:3</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>7:15:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>7:15:1</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
<key>Con2</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>0:16:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>0:48:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
<key>Con3</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
我希望只获得第一个连接集,以便我可以正确地向其中添加数据。 因此,运行该组代码时的理想输出如下所示:
<dict>
<key>Con1</key>
<dict>
<key>KeySet</key>
<dict>
<key>B52:B53:B54</key>
<array>
<dict>
<key>0:0:0</key>
<dict>
<key>Data</key>
<array>
<string>1</string>
<string>2</string>
<string>3</string>
<string>4</string>
<string>5</string>
<string>6</string>
<string>7</string>
</array>
</dict>
</dict>
<dict>
<key>15:15:3</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>7:15:0</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
<dict>
<key>7:15:1</key>
<dict>
<key>Data</key>
<array/>
</dict>
</dict>
</array>
</dict>
</dict>
我在这里做错了什么?
对于Andersson的答复,我将使用此代码来编辑源。 它确实可以工作,但是由于上述问题,在确定正确的级别时遇到了问题。
for parent in tree.xpath(myPath)
parent.insert(1, data)
经过大量调试后,我发现如果在其中添加“ / dict”调用,则可以分离各节并使用[#]访问它们
所以代替这个:
myPath = '//dict[key/text()="Tester"]/dict[key/text()="Con1"][1]'
使用这个
myPath = '//dict[key/text()="Tester"]/dict[key/text()="Con1"]/dict[1]'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.