小编use*_*789的帖子

XMLStarlet 命名空间定义

我需要您有关 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>
Run Code Online (Sandbox Code Playgroud)

等等。

现在,由于命名空间的存在,我在 XMLstarlet 中的查询失败了。

xmlns="http://www.daisy.org/z3986/2005/ncx/"
Run Code Online (Sandbox Code Playgroud)

我读到您可以使用 SED 删除命名空间。就像这样:

cat Myfile.ncx | sed -e 's/ xmlns.*=".*"//g' | xmlstarlet ed -d "/ncx/navMap/navPoint[@playOrder='5']"
Run Code Online (Sandbox Code Playgroud)

效果很好。问题是,我需要命名空间并且不想删除它们。

另外,我也尝试过这个:

xmlstarlet -N x="http://www.daisy.org/z3986/2005/ncx/" ed -d "/ncx/navMap/navPoint[@playOrder='5']" Myfile.ncx
Run Code Online (Sandbox Code Playgroud)

这是行不通的。(也不明白 x in x="http..." 中的 x 意味着什么,我读了一些放置“我的”,一些放置其他值...并且 XMLStarlet 页面中没有这方面的手册页) …

xml namespaces sed xmlstarlet ed

5
推荐指数
1
解决办法
2435
查看次数

标签 统计

ed ×1

namespaces ×1

sed ×1

xml ×1

xmlstarlet ×1