2012-01-04 2 views
0

私は外部データソースに基づいてXMLファイルを最新の状態に保つ自動化プロセスを持っています。このXMLファイルはユーザーが変更することもできますが、手動で変更する必要があります。特定のコメントの後のPython XML処理

<Nodes> 
    <!-- User added data goes here --> 
    <Node name="1">Data Data Data</Node> 
    <Node name="2">Data Data Data</Node> 
    <Node name="3">Data Data Data</Node> 

    <!-- AUTOMATEDSTUFF --> 
    <!-- User, do not modify nodes below this line. --> 
    <Node name="4">Data Data Data</Node> 
    <Node name="5">Data Data Data</Node> 
    <Node name="6">Data Data Data</Node> 

</Nodes> 

ファイルが更新されるたびに、前回の自動化によって追加されたすべてのノードを吹き飛ばしたいと思います。これは、以下のすべてです:

<!-- AUTOMATEDSTUFF --> 

は、今のところ私はこのようなPythonですべてのノードを読んでいる:

xmldoc = minidom.parse(filename) 
nodesSection = xmldoc.getElementsByTagName('Nodes')[0] 
for child in nodesSection.childNodes: 
    ..... 

どのように私は私のコメントに遭遇した後、ノードを探し始めるのですか?

答えて

2

XMLでは、コメントはコメントであり、処理の任意の段階で文書から正当に削除することができます。あなたは単に財産from="autogenerated"ですべてのノードを除外することができ、その後

<Nodes> 
    <!-- User added data goes here --> 
    <Node name="1">Data Data Data</Node> 
    <Node name="2">Data Data Data</Node> 
    <Node name="3">Data Data Data</Node> 

    <!-- User, do not modify nodes below this line. --> 
    <Node name="4" from="autogenerated">Data Data Data</Node> 
    <Node name="5" from="autogenerated">Data Data Data</Node> 
    <Node name="6" from="autogenerated">Data Data Data</Node> 
</Nodes> 

のように、特別な属性を追加するために、あなたのプログラムを適応させる必要があります。

(悪い考えだと前述したように、 ) しかし

、あなたが本当にコメントを検出したい場合は、単に<Node>のすべての子供たちのことを確認してください。

xmldoc = minidom.parse(filename) 
nodes = xmldoc.documentElement.childNodes 
commentIdx = next(i for i,n in enumerate(nodes) if 
       n.nodeType == n.COMMENT_ELEMENT and n.data == ' AUTOMATEDSTUFF ') 
automatedNodes = nodes[commentIdx+1:] 
print(automatedNodes) # or do something else with them 
関連する問題