2017-01-25 2 views
0

デフォルトの名前空間と接頭辞付きの名前空間は同じURIを共有します。デフォルトの名前空間とプレフィックス付きの名前空間は同じURIを共有しています - Pythonを使用して要素からデフォルトの名前空間URIだけを削除する必要があります

XML:

<Envelope xmlns="http://www.ibm.com/mdm/schema" xmlns:sch="http://www.ibm.com/mdm/schema"> 
<sch:requesterName>cusadmin</sch:requesterName> 
<sch:requesterLanguage>100</sch:requesterLanguage> 
<sch:requestOrigin>QAOffshore</sch:requestOrigin> 
<QuestionId>472</QuestionId> 
</Envelope> 

私は、要素タグからだけでは、デフォルトの名前空間を削除する必要があります。デフォルトと接頭辞名前空間URIが同じで、両方のために、次のコードは、あまりにも接頭辞、名前空間を削除:(

私のコード:。

from lxml import etree 
import re 
df_temp1=[] 
root_ns=etree.iterparse(open("D:\\Sample_data\\XML\\data_stack.xml",'r'),events=['start-ns']) 
for _, node in root_ns: 
    if(node[0]==''): 
     df_temp1.append(node[1]) 
tree=etree.parse(open("D:\\Sample_data\\XML\\data_stack.xml",'r')) 
for e in tree.iter(): 
     #if element has default namespace--remove the default namespace 
     if '{' in e.tag: 
      names = e.tag.split('}', 1)[0] 
      names1=re.sub("[\{\}]","",names) 
      if(names1 in df_temp1): 
       e.tag=e.tag.split('}', 1)[1] 
     print e.tag 

出力:

Envelope 
requesterName 
requesterLanguage 
requestOrigin 
QuestionId 

を期待される結果を:

Envelope 
{http://www.ibm.com/mdm/schema}requesterName 
{http://www.ibm.com/mdm/schema}requesterLanguage 
{http://www.ibm.com/mdm/schema}requestOrigin 
QuestionId 

このような出力を得るにはどうすればよいですか?あなたの名前空間接頭辞を除去するために

+0

のような名前空間を登録する必要があります:// www.ibm.com/mdm/schema "')が削除されると、ルート要素はネームスペースには含まれず、 '{http://www.ibm.com/mdm/schema}エンベロープ 'は期待される結果。 – mzjn

+0

@mzjnはい、そうです。私は期待した結果を変更しました... – mariz

+0

私は単純なテキスト検索を提案し、これに似た操作を置き換えます:http://stackoverflow.com/a/40978913/407651。 – mzjn

答えて

0

SCH」唯一の変更は、そのデフォルトの名前空間宣言( `のxmlnsは=" HTTPである場合は、below-

ET.register_namespace('', "http://www.ibm.com/mdm/schema") 
関連する問題