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="http..." で x が何を意味するのか理解していない
この XML ファイルで XMLStarlet を使用し、出力に名前空間を保持する方法はありますか?
(XML スターレットを使用して、使用しないノードをいくつか削除します。シェル コマンドを使用するよりも、この方法で作成する方が安全です)
助けてくれた人に感謝します;)