Наистина съм на загуба от това. Опитвам се да търся в текстовите полета на етикета с данни „MF22“ от xml файл, използвайки xpath и съдържа. Работи добре, когато включа низа за търсене директно във функцията съдържа. Но когато се опитам да го предам като аргумент, той връща всичко във файла.
from lxml import etree as ElementTree
ET = ElementTree.parse('USFLMEO_USSHARE_60200.txt')
bcnIDstr = "AB"
test1 = ET.xpath("//MF22[text()[contains(.,bcnIDstr)]]")
print 'found ' + str(len(test1)) + ' packets'
test2 = ET.xpath("//MF22[text()[contains(.,'AB')]]")
print 'found ' + str(len(test2)) + ' packets'
for elem in test1:
packet = elem.getparent()
for elem2 in packet:
print elem2.tag, elem2.text
Така че в горния код „test2“ намира всички правилни елементи, но „test1“ не. XML данни по-долу.
<?xml version="1.0" ?>
<topMessage>
<header dest="366Z" orig="USFLMEO" number="60200" date="2015-10-02T00:00:59.000000000Z" />
<message>
<packetsMessage>
<packet>
<MF6>324</MF6>
<MF11>3669</MF11>
<MF71>2</MF71>
<MF22>9C634E2AB509240</MF22>
<MF77>FFFE2FCE31A7155A849207E5B34027500004</MF77>
<MF67>15 275 0000 40.147870</MF67>
<MF68>406033830.154</MF68>
<MF69>0.000000</MF69>
<MF70>99999.999</MF70>
<MF72>45.1169</MF72>
<MF73>399.987</MF73>
<MF74>0000</MF74>
</packet>
<packet>
<MF6>318</MF6>
<MF11>3669</MF11>
<MF71>1</MF71>
<MF22>9C634E2AB509240</MF22>
<MF77>FFFE2FCE31A7155A849207E5B34027500004</MF77>
<MF67>15 275 0000 40.147850</MF67>
<MF68>406033830.673</MF68>
<MF69>0.000000</MF69>
<MF70>99999.999</MF70>
<MF72>40.0184</MF72>
<MF73>400.066</MF73>
<MF74>0000</MF74>
</packet>
<packet>
<MF6>324</MF6>
<MF11>3669</MF11>
<MF71>2</MF71>
<MF22>9C02BE29630F0A0</MF22>
<MF77>FFFE2FCE015F14B18785039DABCE5A4EC14F</MF77>
<MF67>15 275 0000 42.922460</MF67>
<MF68>406033518.783</MF68>
<MF69>0.000000</MF69>
<MF70>99999.999</MF70>
<MF72>41.5108</MF72>
<MF73>400.053</MF73>
<MF74>0000</MF74>
</packet>
<packet>
<MF6>315</MF6>
<MF11>3669</MF11>
<MF71>3</MF71>
<MF22>9C02BE29630F0A0</MF22>
<MF77>FFFE2FCE015F14B18785039DABCE5A4EC14F</MF77>
<MF67>15 275 0000 42.924905</MF67>
<MF68>406038122.646</MF68>
<MF69>0.000000</MF69>
<MF70>99999.999</MF70>
<MF72>41.0458</MF72>
<MF73>399.815</MF73>
<MF74>0000</MF74>
</packet>
</packetsMessage>
</message>
</topMessage>
Благодаря предварително!
test1 = ET.xpath('//MF22[text()[contains(.,"%s")]]' % bcnIDstr)
- person Jesse Reich   schedule 11.12.2015