5

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 スターレットを使用して、使用しないノードをいくつか削除します。シェル コマンドを使用するよりも、この方法で作成する方が安全です)

助けてくれた人に感謝します;)

4

2 に答える 2