のような XML で
<a>
<b>
</b>
</a>
次のような兄弟を追加する必要があります
<a>
<b>
</b>
<b'>
</b'>
</a>
ElementTree に兄弟ノードを追加する機能はありますか? そうでない場合は、親ノードを取得して子ノードを追加する関数が必要だと思いますが、どうすればよいですか?
のような XML で
<a>
<b>
</b>
</a>
次のような兄弟を追加する必要があります
<a>
<b>
</b>
<b'>
</b'>
</a>
ElementTree に兄弟ノードを追加する機能はありますか? そうでない場合は、親ノードを取得して子ノードを追加する関数が必要だと思いますが、どうすればよいですか?
標準ライブラリのバージョンでは、親に直接アクセスすることはできません。親から作業を進めるか、親子関係を自分で追跡する必要があります。これらのヒントを読んでください(ライブラリの作成者から)。
ただし、lxmlを使用する場合は、getparent()
メソッドがあります(ともgetnext()
ありgetprevious()
ます)が、さらに便利です。とがaddnext()
ありaddprevious()
ます。
したがって、使用しているElementTree実装に基づいて、これらのソリューションの1つを選択してください(または、実装を切り替えることもできます)。
Python 標準ライブラリに含まれているデフォルトの ElementTree 実装には、親ノードを取得するメソッドがありません。
ただし、lxml のetree 実装を使用できる場合は、getparent()
方法があります。
手元にあるもので:
import re
def sibling(bal,text):
print 'bal ==' + bal + '\n' # + '\n\n' + s
def aux(match):
# match.group(4) is '/' or None
return ("%s%s<%s'/>%s" % match.group(1,2,3,6) if match.group(4)
else "%s%s<%s'>%s'>%s" % match.group(1,2,3,5,6))
return re.sub('('
'(^\s*)<(' + bal + ')(?: [^/>]+)?' # 2 and 3
'(?:(/)|>(?:.*?)((?:(?:\n|\r\n?)\\2)?</\\3))' # 4 and 5
'>(\n|\r\n?|\Z)' # 6
')',
aux, text, flags = re.MULTILINE|re.DOTALL)
ch = """\
<a>
<b>
</b>
</a>
"""
dh = """\
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
</OTF>
</entry>
"""
print sibling('a',ch)
print '------------------------------------------------------'
print sibling('b',ch)
print '------------------------------------------------------'
for x in ('entry','dd:country_code','content','OTF','FECS',
'BackEndCompatibility','BackEnd','Forth'):
print sibling(x,dh)
print '------------------------------------------------------'
結果:
bal ==a
<a>
<b>
</b>
</a>
<a'>
</a'>
------------------------------------------------------
bal ==b
<a>
<b>
</b>
<b'>
</b'>
</a>
------------------------------------------------------
bal ==entry
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
</OTF>
</entry>
<entry'>
</entry'>
------------------------------------------------------
bal ==dd:country_code
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<dd:country_code'></dd:country_code'>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
</OTF>
</entry>
------------------------------------------------------
bal ==content
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<content'></content'>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
</OTF>
</entry>
------------------------------------------------------
bal ==OTF
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
</OTF>
<OTF'>
</OTF'>
</entry>
------------------------------------------------------
bal ==FECS
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
<FECS'>
</FECS'>
</OTF>
</entry>
------------------------------------------------------
bal ==BackEndCompatibility
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
<BackEndCompatibility'>
</BackEndCompatibility'>
</FECS>
</OTF>
</entry>
------------------------------------------------------
bal ==BackEnd
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<BackEnd'/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
</BackEndCompatibility>
</FECS>
</OTF>
</entry>
------------------------------------------------------
bal ==Forth
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dd="http://example.com/ns/1.0" xml:lang="en-US">
<entry>
<dd:country_code>USA</dd:country_code>
<content type="html">Hello World!</content>
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
<Forth type="ziwi">d,;%er*dkj@jkber-uyr</Forth>
<Forth'></Forth'>
</BackEndCompatibility>
</FECS>
</OTF>
</entry>
------------------------------------------------------
それはのために働き'a'
ます
"""\
<a>
<b>
</b>
</a>
"""
だがしかし
"""\
<a>
<b>
</b>
</a>"""