Xml
將 XML 元素重命名為序列
我正在尋找另一個問題的可能的基於 XML 的解決方案。我知道它接受的答案,它提供
sed
和python
解決方案。給定的 XML 片段是:
<Names> <Name>Luigi</Name> <Name>Mario</Name> <Name>Peach</Name> </Names>
並且要求是將
<Name/>
元素名稱更改為序列<Name1/>
,<Name2/>
,<Name3/>
等。使用
xmlstarlet
我可以將<Name/>
元素值重命名為固定值,如下所示xmlstarlet ed -u '//Name' -v 'Another' names.xml <Names> <Another>Luigi</Another> <Another>Mario</Another> <Another>Peach</Another> </Names>
我什至可以使用
-x
(--expr
) 將元素值更改為表達式。但是對於編輯元素名稱本身,沒有
-x
(--expr
) 選項可以替代-v
(--value
) 選項,所以我不能使用這樣的東西:xmlstarlet ed -u '//Name' -x 'concat(., position())' names.xml
使用 XML 感知工具,例如
xmlstarlet
,是否可以轉換輸入 XML 以區分這樣的<Name/>
元素,如果可以,如何?<Names> <Name1>Luigi</Name1> <Name2>Mario</Name2> <Name3>Peach</Name3> </Names>
我使用 XML 命令行工具的經驗讓我覺得有很多地方需要改進。幾乎沒有失敗,我發現自己放棄了,只使用了 Python。就是說,我認為我有一個適用於該
basex
實用程序的 XQuery 解決方案來解決這個問題。這是 XQuery 表達式:<!-- xml_rename_sequence.xquery --> for $name at $position in doc('names.xml')//Name return rename node $name as concat(name($name),$position)
這是 XML 數據文件:
<!-- names.xml --> <Names> <Name>Luigi</Name> <Name>Mario</Name> <Name>Peach</Name> </Names>
這是我們執行腳本的方式(它就地修改文件):
basex -u xml_rename_sequence.xquery
這是更新的數據文件:
<!-- names.xml --> <Names> <Name1>Luigi</Name1> <Name2>Mario</Name2> <Name3>Peach</Name3> </Names>
我還嘗試使用以下工具(沒有成功):
以下是我發現的一些關於在 XQuery 中增加計數器的文章:
以下是我使用的其他一些參考資料: