目標は、指定された文字列内の特定のXMLタグ(およびその内容)の位置を変更することです - 理想的にはregexを使用します。
文字列(私のxmlデータを表す)は、要素の前に表示される<MoveMe>
要素の構造を持っています。Pythonの正規表現を使用してxml要素の順序を変更します
すべての移動方法<MoveMe>.*</MoveMe>
と<xsi:MoveMe>.*</xsi:MoveMe>
は、同等の後に発生します。</Target>
または</xsi:Target>
??
入力:
<?xml version="1.0"?>
<stylesheet version="1.0" xmlns:xsi="http://some.namespace.org">
<template>
<root>
<body>
<h2>sample</h2>
<table>
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<MoveMe>Hans Müller fist
content 1 </MoveMe>
<Target>
<td>a1</td>
<td>b1</td>
</Target>
</table>
<table>
<tr><th>Title</th></tr>
<xsi:MoveMe>again</xsi:MoveMe>
<xsi:Target>
<td>x2</td>
</xsi:Target>
</table>
</body>
</root>
</template>
</stylesheet>
出力:
<?xml version="1.0"?>
<stylesheet version="1.0" xmlns:xsi="http://some.namespace.org">
<template>
<root>
<body>
<h2>sample</h2>
<table>
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<Target>
<td>a1</td>
<td>b1</td>
</Target>
<MoveMe>Hans Müller fist
content 1 </MoveMe>
</table>
<table>
<tr><th>Title</th></tr>
<xsi:Target>
<td>x2</td>
</xsi:Target>
<xsi:MoveMe>again</xsi:MoveMe>
</table>
</body>
</root>
</template>
</stylesheet>
は、これまでのところ、私はこのパターンを使用してMoveMe
すべてのノードgrupusをキャプチャするために管理:<table>
要素が発生する可能性があること
s_pat = "(<(xsi:)?MoveMe>(.*?)<\/(xsi:)?MoveMe>)"
注意を複数回であるが、MoveMe
との両方要素は単一です。
は、正規表現でHTMLを解析に似ています。私はそれに答えてこの他の質問にあなたを参照します:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – grepe
まあ、これはかなりあなたです私たちがここで扱っているケースでは、これはちょうど私が推測する文字列として考えることができます... - 他のトピックは、これをElementTreeオブジェクトに解析し、内部で子オーダーを操作しようとしますが、これは別の話です。 – modzello86
_moveme_と_target_は隣接していますか? – sln