2017-07-06 22 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']”)'可能会帮助你 –

相关问题