我可以帮助您翻译有关XMLStarlet的命名空间问题。我有一个像这样的XML文件:
我需要你为 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是什么意思。我看到有些人使用“my”,有些人使用其他值... XMLStarlet页面中也没有man页面)
有没有办法在输出中保留此XML文件的命名空间,同时使用XMLStarlet删除某些未使用的节点?
(我使用XML starlet删除一些未使用的节点。这种方式比使用shell命令更安全)
非常感谢帮助的人;)