這里的目標是向檔案添加一個條目,user-places.xbel用于管理檔案管理器的書簽。
請參閱下面的預期輸出(<bookmark:icon>條目)以及 xbel 檔案的整體檔案結構。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE xbel>
<xbel xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
xmlns:kdepriv="http://www.kde.org/kdepriv"
xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
>
<info>
<!-- left out for simplicity -->
</info>
<bookmark href="ADDRESS">
<title>My bookmark</title>
<info>
<metadata owner="http://freedesktop.org">
<bookmark:icon name="network-workgroup"/>
</metadata>
<metadata owner="http://www.kde.org">
<ID>123467890/0</ID>
<OnlyInApp></OnlyInApp>
<isSystemItem>false</isSystemItem>
<isHidden>false</isHidden>
</info>
</bookmark>
</xbel>
我使用 Ansiblescommunity.general.xml來編輯這個檔案。這是我的任務定義:
- name: Add file manager entry for NAS
community.general.xml:
path: .local/share/user-places.xbel.bak
xpath: /xbel
pretty_print: yes
namespaces:
bookmark: "http://www.freedesktop.org/standards/desktop-bookmarks"
add_children:
- bookmark:
href: 'ADDRESS'
_:
- title: My bookmark
- info:
_:
- metadata:
owner: 'http://freedesktop.org'
_:
- "{bookmark}icon":
name: 'network-workgroup'
- metadata:
owner: 'http://www.kde.org'
_:
- ID: '1234567890/0'
- OnlyInApp: ''
- isSystemItem: 'false'
- isHidden: 'false'
但是,這會生成此標簽:
<ns0:icon xmlns:ns0="bookmark" name="network-workgroup"/>
而不是預期的標簽:
<bookmark:icon name="network-workgroup"/>
我應該改變什么?
uj5u.com熱心網友回復:
當使用 LXML(Ansible 使用的 Python 庫)添加命名空間時,建議您使用真正的命名空間而不是命名空間前綴:
ElementTree API盡可能避免命名空間前綴,而是部署真正的命名空間(URI)
來源:https ://lxml.de/tutorial.html#namespaces
所以,一個修復可能是在你的節點定義中完全做到這一點,并使用:
- "{http://www.freedesktop.org/standards/desktop-bookmarks}icon":
代替
- "{bookmark}icon":
如果這樣重復命名空間對您來說看起來很麻煩,您可以將其放入變數中并根據所述變數構造您的節點。
例如,vars在您的標簽中添加這些:
boormark_ns: http://www.freedesktop.org/standards/desktop-bookmarks
icon_node: >-
{{
{
'{' ~ boormark_ns ~ '}icon': {
'name': 'network-workgroup'
}
}
}}
您的節點定義變為:
- "{{ icon_node }}"
因此,完整的任務是:
- name: Add file manager entry for NAS
community.general.xml:
path: tst.xml
xpath: /xbel
pretty_print: yes
namespaces:
bookmark: "{( boormark_ns )}"
add_children:
- bookmark:
href: 'ADDRESS'
_:
- title: My bookmark
- info:
_:
- metadata:
owner: 'http://freedesktop.org'
_:
- "{{ icon_node }}"
- metadata:
owner: 'http://www.kde.org'
_:
- ID: '1234567890/0aaaa'
- OnlyInApp: ''
- isSystemItem: 'false'
- isHidden: 'false'
vars:
boormark_ns: http://www.freedesktop.org/standards/desktop-bookmarks
icon_node: >-
{{
{
'{' ~ boormark_ns ~ '}icon': {
'name': 'network-workgroup'
}
}
}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467247.html
下一篇:XSLT模板回圈記錄
