~/.config/openbox/lxde-pi-rc.xml
を編集するスクリプトを書きたかったので。
参考
- https://docs.python.org/ja/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.SubElement
- https://orangain.hatenablog.com/entry/namespaces-in-xpath
手順
import xml.etree.ElementTree as ET import pathlib path = str(pathlib.Path('~/.config/openbox/lxde-pi-rc.xml').expanduser()) tree = ET.parse(path) root = tree.getroot() ns = {'ob': 'http://openbox.org/3.4/rc'} for keybind in root.findall('.//ob:keybind', ns): print(keybind.attrib['key']) keyboard = root.findall('.//ob:keyboard', ns) print(keyboard) keybind = ET.Element('keybind', {'key': 'C-S-m'}) action = ET.SubElement(keybind, 'action', {'name': 'Execute'}) command = ET.SubElement(action, 'command') command.text = 'scrot' keyboard.append(keybind) #tree.write(path)
Ctrl+Shift+Mキーでscrot
コマンドを実行するホットキーを追加したかった。
しかし追加されず。それだけでなくファイルを壊された。勝手に要素に名前空間を付与された。コメント消された。……。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux
糞ポイント
- 参照エラー(ファイル名重複)
xml.py
にするとImportError: No module named 'xml.etree'; 'xml' is not a package
と怒られるxmltest.py
など他の名前にする
- 検索
- 名前空間を指定しないと検索できない
- 書込
- 勝手に要素名に名前空間がつけられる
- 勝手にコメントを削除される
ひどすぎて目も当てられない。使い物にならない。
所感
やっぱりXMLは触りたくない。思い通りに操作できない。ここまでひどいとは思わなかった。もうこれ以上は面倒すぎて嫌。