Мне нужна ваша помощь в пространствах имен для XMLStarlet. (никогда не видел библиотеку, которая плохо объясняла) У меня есть файл XML, например:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx version="2005-1" xml:lang="fr" xmlns="http://www.daisy.org/z3986/2005/ncx/">
<head>
<meta name="dtb:uid" content="9782721213747"/>
<meta name="dtb:depth" content="1"/>
<meta name="dtb:totalPageCount" content="0"/>
<meta name="dtb:maxPageNumber" content="0"/>
</head>
<docTitle>
<text>My text</text>
</docTitle>
<navMap>
<navPoint id="NavPoint-1" playOrder="1"><navLabel><text>Couverture</text></navLabel><content src="01_cover.html"/></navPoint>
И так далее.
Так что теперь мои запросы в XMLstarlet терпят неудачу из-за наличия пространств имен.
xmlns="http://www.daisy.org/z3986/2005/ncx/"
Я читал, что вы можете использовать SED для удаления пространств имен. Просто так:
cat Myfile.ncx | sed -e 's/ xmlns.*=".*"//g' | xmlstarlet ed -d "/ncx/navMap/navPoint[@playOrder='5']"
Который отлично работает. Проблема в том, что мне нужны пространства имен, и я не хочу их удалять.
Кроме того, я пробовал это:
xmlstarlet -N x="http://www.daisy.org/z3986/2005/ncx/" ed -d "/ncx/navMap/navPoint[@playOrder='5']" Myfile.ncx
который не работает. (также не понимая, что означает x в x="http...", я читал, что некоторые ставят "мой", некоторые ставят другие значения... и на страницах XMLStarlet нет справочной страницы для этого)
Любая идея, как использовать XMLStarlet с этим файлом XML и СОХРАНЯТЬ пространства имен в выводе?
(Я использую XML starlet для удаления некоторых узлов, которые я не использую. Это намного безопаснее, чем использовать команды оболочки)
Огромная благодарность тому, кто поможет ;)