我想從命令行參數中讀取XML文件。一般來說,我是使用libxml2和XPath的新手。我想用XPath查詢。Python libxml2:使用xpath查詢xml
XML:
<?xml version="1.0"?>
<xmi:XMI xmlns:cas="http:///text/cas.ecore" xmlns:audioform="http:something" xmlns:xmi="http://blahblah" xmlns:lib="http://blahblah" xmlns:solr="http:blahblah" xmlns:tcas="http:///blah" xmi:version="2.0">
<cas:NULL xmi:id="0"/>
<cas:Sofa xmi:id="9" Num="1" ID="First" Type="text" String="play a song"/>
<cas:Sofa xmi:id="63" Num="2" ID="Second" Type="text" String="Find a contact"/>
<cas:Sofa xmi:id="72" Num="3" ID="Third" Type="text" String="Send a message"/>
<lib:Confidence xmi:id="1" sofa="9" begin="0" end="1" key="context" value="" confidence="1.0"/>
</xmi:XMI>
代碼:
def main(argv):
try:
xmlfile=argv[0]
doc=libxml2.parseFile(xmlfile)
root2=doc.children
print root2 # This prints everything but <?xml version="1.0"?>
result= root2.xpathEval("//*")
for node in result:
print node
print node.nodePath(), node.name, node.content
我想走得更遠,做使用此文件某種處理。
- 如何使用xpath獲得像63這樣的值?從
xmi:id="63"
。 - 查找字符串,其中
xmi:id = "72"
。結果應該是「發送消息」 - 查找字符串,其中
xmi:id = 72 and ID= "Third"
。結果應該是「發送消息」 我使用
node.Path()
,node.name
和node.content
此節點嘗試:<cas:Sofa xmi:id="9" Num="1" ID="First" Type="text" String="play a song"/>
的結果是:
/xmi:XMI/cas:Sofa[1]
爲nodePath()
,沙發姓名和印刷品沒有內容
我該如何去得到1和2和3?
嗨,Guy,你可以給出程序的前幾行:ttributeError : 'ElementTree的' 對象有沒有屬性 '的XPath' 如何完成這個:'高清主(argv的):' elem_list = [] elem_num = 0 嘗試: XMLFILE =的argv [0] DOC = ET。解析(xmlfile) root = doc。getroot() for root in root:' – user1189851
已更新,另請參閱http://lxml.de/xpathxslt.html#namespaces-and-prefixes –
好吧,適合我(Python 3.3.3) –