2017-04-26 65 views
-1

我需要的z的输出:从其中接收作为响应从SharePoint解析XML在具有蟒的SharePoint输出命名空间

我所需要的输出作为

Title dept 
test hr 
gang ht 

输入I的XMLFILE沿行作为得到XMLFILE是

<xml xmlns:s="uuid:ABCDDC" xmlns:dt="uuid:REDSD" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> 
    <s:Schema id="RowsetSchema"> 
     <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30"> 
      <s:AttributeType name="Title" rs:name="Title" rs:number="1"> 
       <s:datatype dt:type="string" dt:maxLength="512"/> 
      </s:AttributeType> 
     <s:AttributeType name="dept" rs:name="dept" rs:number="1"> 
      <s:datatype dt:type="string" dt:maxLength="512"/> 
     </s:AttributeType> 
</s:ElementType> 
</s:Schema> 
<rs:data> 
<z:row Title="test" dept="hr" /> 
<z:row Title="gang" dept="ht" /> 
</rs:data> 
</xml> 
+0

与命名空间解析不工作,我是新来的蟒蛇任何帮助表示高度赞赏 – Rafa

回答

0

您可以使用lxml包装,拿出所有的数据节点,像这样:

from lxml import etree 

xml_tree = etree.parse("file.xml") 

data_nodes = xml_tree.findall("//{#RowsetSchema}row") 

for node in data_nodes: 
    print node.get('Title'), node.get("dept") 

找到你想要的特定节点有时会因为与它们相关的命名空间而变得棘手。你会认为你需要"row"节点,但它实际上是"{#RowsetSchema}row"。如果要检查与每个节点关联的命名空间,可以使用方法,并打印标记名称。

例子:

for node in xml_tree.iter(): 
    print node.tag