2017-07-06 58 views
0

我試圖解析與etree一個XML,當沒有文檔類型可用時,lxml不起作用?

import re 
from lxml import etree 
from pprint import pprint 

doc = etree.parse('123.xml') 
print doc.xpath('//jdbc-driver-params/url') 

但不管我用什麼XPath查詢,它總是doc.xpath返回一個空列表

任何想法?附加的XML

<?xml version="1.0" encoding="UTF-8"?> 
<jdbc-data-source xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source"> 
    <name>jdbc/db_ejemplo</name> 
    <jdbc-driver-params> 
    <url>jdbc:mysql://localhost:3306/db_ejemplo</url> 
    <driver-name>com.mysql.jdbc.Driver</driver-name> 
    <properties> 
     <property> 
     <name>user</name> 
     <value>root</value> 
     </property> 
     <property> 
     <name>password</name> 
     <value>Qwer1234</value> 
     </property> 
    </properties> 
    </jdbc-driver-params> 
    <jdbc-data-source-params> 
    <jndi-name>jdbc/db_ejemplo</jndi-name> 
    </jdbc-data-source-params> 
</jdbc-data-source> 

回答

0

它看起來像命名空間導致了問題:

doc.xpath(
    '//ns:jdbc-data-source/ns:jdbc-driver-params/ns:url', 
    namespaces={ 
     'ns':'http://xmlns.oracle.com/weblogic/jdbc-data-source' 
    } 
) 

產量:

[<Element {http://xmlns.oracle.com/weblogic/jdbc-data-source}url at 0x1049877a0>] 
+0

如何分析任意命名空間? – daisy

+1

這取決於你想從XML文件中提取什麼,但是'doc.xpath(「// * [local-name()='url']」)'可能會幫助你 –

相關問題