假设我想用(POSIX兼容的)shell脚本创建下一个XML文件:
<xml>
<item>
<title>The Turning Point to a Cross Fade in a Carpark</title>
<slug>the-turning-point-to-a-cross-fade-in-a-carpark</slug>
</item>
<item>
<title>The Cycle Continues in One Direction</title>
<slug>the-cycle-continues-in-one-direction</slug>
</item>
</xml>
但我只有下一个:
<xml>
<item>
<title>The Turning Point to a Cross Fade in a Carpark</title>
</item>
<item>
<title>The Cycle Continues in One Direction</title>
</item>
</xml>
使用XMLStarlet edit --update
(并且仅使用--update
)我可以在表单中使用XPath表达式而不是字符串值:
xml ed -u '/xml/item/slug' -x '../title/text()'
但XPath 2.0字符串函数似乎不起作用(xmlXPathCompOpEval: function lower-case not found
)。然后我怎么能遍历所有块并使用<title>
元素的文本值来生成<slug>
元素?如何使用最少xml
次操作执行此操作?
答案 0 :(得分:0)
类似的东西:
translate(../title,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','abcdefghijklmnopqrstuvwxyz-')
答案 1 :(得分:0)
这是我到目前为止translate()
和normalize-space()
。
xml ed -a '/xml/item/title' \
-t 'elem' \
-n 'slug' \
-v '' \
\
-u '/xml/item/slug' \
-x 'translate(
normalize-space(
translate(
../title/text(),
"AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ-+.,:;!()&#",
"aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz "
)
),
" ",
"-"
)'
这背后的想法是
制作那个字符集远非最佳,因为我必须指定我要删除的每个字符,而我只知道那些应该保留的字符。如何将打字机撇号放入集合中?!
我愿意接受更好的创意。