XML 示例如下:
<File>
<Sub_Function_1>
<Messages>
<Setting>
<Data>
<Label>Setting_2</Label>
<Value>
<Measure>
<Data>Area_2</Data>
<Bound>
<Value>
<Speed>2000</Speed>
</Value>
<Condition>
<Data>0</Data>
</Condition>
</Bound>
<Bound>
<Value>
<Distance>10000</Distance>
</Value>
<Condition>
<Data>12000</Data>
</Condition>
</Bound>
</Measure>
</Value>
</Data>
<Data>
<Label>Setting_3</Label>
<Value>
<Default_value_if_undefined>
<Value>
<Value_on_condition>
<Case>
<Value>
<Measure>
<Speed>25</Speed>
<Bound>
<Value>
<Time>2000</Time>
</Value>
<Condition>
<Speed>0</Speed>
</Condition>
</Bound>
<Bound>
<Value>
<Distance>10000</Distance>
</Value>
<Condition>
<Speed>12000</Speed>
</Condition>
</Bound>
</Measure>
</Value>
<Condition>
<Data>Area_0</Data>
</Condition>
</Case>
</Value_on_condition>
</Value>
<Default_value>
<Integer>2000</Integer>
</Default_value>
</Default_value_if_undefined>
</Value>
</Data>
</Setting>
</Messages>
</Sub_Function_1>
</File>
代碼如下:
for k in doc2.xpath('//Measure//Data[following-sibling::Bound]'):
val1 = k.xpath('following-sibling::Bound[1]/Value/*')[0]
val2 = k.xpath('following-sibling::Bound[2]/Value/*')[0]
if val1.tag !=val2.tag:
print("val:",val1.tag,"--",val1.sourceline,val2.tag,"--",val2.sourceline)
for k in doc2.xpath('//File[.//Measure//Data[following-sibling::Bound]]'):
val1 = k.xpath('.//Measure//Data[following-sibling::Bound[1]/Value/*[1]]')
val2 = k.xpath('.//Measure//Data[following-sibling::Bound[2]/Value/*[1]]')
if val1 != val2:
print("val:",val1, "--", val1.sourceline, val2, "--", val2.sourceline)
我得到的輸出:
val: Speed -- 13 Distance -- 21
我期待的輸出:
val: Speed -- 13 Distance -- 21
val: Time -- 42 Distance -- 50
當兩者或具有不同屬性時,我正在列印行,如快照所示
出于某種原因,它不會列印所有元素,例如如果它在 xml 中的“Setting_3”中的“<Value_on_condition>”內,所以如果它是一個長 xml,它無法找到度量值并比較 Val1 和 Val2

uj5u.com熱心網友回復:
此問題中的 xml 結構與您的其他問題中的結構不同。為了反映這一點,請將您的for回圈更改為:
for k in doc2.xpath('//Value//Measure'):
val1 = k.xpath('.//Bound[1]//Value/*')[0]
val2 = k.xpath('.//Bound[2]//Value/*')[0]
if val1.tag !=val2.tag:
print(val1.tag,"--",val1.sourceline,val2.tag,"--",val2.sourceline)
cond1 = k.xpath('.//Bound[1]//Condition/*')[0]
cond2 = k.xpath('.//Bound[2]//Condition/*')[0]
if cond1.tag !=cond2.tag:
print(cond1.tag,"--",cond1.sourceline,val2.tag,"--",cond2.sourceline)
我得到的輸出是
Speed -- 12 Distance -- 20
Time -- 41 Distance -- 49
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532253.html
