2013-08-05 170 views
1

全部 我在Python语言中使用了XPath库。但我不能在我的XML文件中使用冒号。XML属性的XPath查询,包含节点的冒号

的XML文件内容:

xmlns:rtr="http://www.reuters.com/ns/2003/08/content" 
    <packageItem conformance="power" guid="2013-07-17 15:53:21" standard="NewsML-G2" standardversion="2.14" version="1" xml:lang="en"> 
    <itemClass qcode="icls:composite" rtr:msgType="S"/> 

这是两个方法我已经写了。

def getxmlVal(self, expr): 
    data = xpath.findvalue(expr, self.doc) 
    return data 
def getValnamespaces(self, expr, namespace): 
    context = xpath.XPathContext(default_namespace=namespace) 
    return context.findvalue(expr, self.doc); 

我也尝试: 的方法getxmlVal

  1. EXPR = “// packageItem/itemMeta/itemClass时/ * [本地名称()= 'RTR:MSGTYPE'和 namespace-uri()='http://www.reuters.com/ns/2003/08/content']“;

  2. expr= "//itemMeta/itemClass/*[name()='rtr:msgType']";

的方法getValnamespaces

expr= "//itemMeta/itemClass/*[name()='rtr:msgType']"; 
namespace = "http://www.reuters.com/ns/2003/08/content"; 

,但我可以得到None

什么毛病我的方法?

感谢

+0

你的代码是形成不良的,其真的很难看看你已经尝试过了。你究竟想在这里做什么? – 2013-08-05 03:42:52

+0

我改变了它。对不起 – user2378427

回答

0

您需要使用@匹配属性,同时试图匹配local-name()你不应该指定命名空间:

expr= "//packageItem/itemMeta/itemClass/@*[local-name()='msgType' and namespace-uri()='http://www.reuters.com/ns/2003/08/content']"; 
+0

非常感谢。有用。 – user2378427