我想使用以下方法从XML获取一些行( z:row 行):
<rs:data>
<z:row Attribute1="1" Attribute2="1" />
<z:row Attribute1="2" Attribute2="2" />
<z:row Attribute1="3" Attribute2="3" />
<z:row Attribute1="4" Attribute2="4" />
<z:row Attribute1="5" Attribute2="5" />
<z:row Attribute1="6" Attribute2="6" />
</rs:data>
我无法使用( Python ):
ElementTree.parse('myxmlfile.xml').getroot().findall('//z:row')
我认为在这种情况下两点是无效的。
任何人都知道我该怎么办?
答案 0 :(得分:1)
如果您不想弄清楚正确设置命名空间,可以忽略它们:
XPathGet("//*[local-name() = 'row']")
选择名称(没有名称空间)为row
的每个节点。
答案 1 :(得分:1)
“z:”前缀表示XML命名空间。您需要找出该命名空间的内容,并执行以下操作:
XmlDocument doc = new XmlDocument();
doc.Load(@"File.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("z", @"http://thenamespace.com");
XmlNodeList nodes = doc.SelectNodes(@"//z:row", ns);
答案 2 :(得分:1)
如果我像这样定义命名空间:
<?xml version="1.0"?>
<rs:data xmlns="http://example.com" xmlns:rs="http://example.com/rs" xmlns:z="http://example.com/z">
<z:row Attribute1="1" Attribute2="1" />
<z:row Attribute1="2" Attribute2="2" />
<z:row Attribute1="3" Attribute2="3" />
<z:row Attribute1="4" Attribute2="4" />
<z:row Attribute1="5" Attribute2="5" />
<z:row Attribute1="6" Attribute2="6" />
</rs:data>
Python ElementTree - API可以像这样使用:
ElementTree.parse("r.xml").getroot().findall('{http://example.com/z}row')
# => [<Element {http://example.com/z}row at 551ee0>, <Element {http://example.com/z}row at 551c60>, <Element {http://example.com/z}row at 551f08>, <Element {http://example.com/z}row at 551be8>, <Element {http://example.com/z}row at 551eb8>, <Element {http://example.com/z}row at 551f30>]