gpt4 book ai didi

XMLStarlet 命名空间定义

转载 作者:行者123 更新时间:2023-12-04 06:36:08 27 4
gpt4 key购买 nike

我需要您在 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..."是什么意思,我读了一些 put "my"一些 put 其他值......并且在 XMLStarlet 页面中没有这方面的手册页)

知道如何将 XMLStarlet 与此 XML 文件一起使用并在输出中保留 namespace 吗?

(我使用 XML starlet 删除一些我不使用的节点。这样做比使用 shell 命令更安全)

非常感谢帮助的人;)

最佳答案

not understanding what means x in x="http..." I read some put "my" some put other values


x是您给命名空间的名称。然后您必须在查询中使用它:
xmlstarlet ed -N x="http://www.daisy.org/z3986/2005/ncx/" -d "/x:ncx/x:navMap/x:navPoint[@playOrder='5']" Myfile.ncx
-N选项必须遵循 ed命令,正如@reinierpost 指出的那样。

... and there is no man page for this in the XMLStarlet pages



手册页比较少,在 chapter 5 of the user's guide中有说明.

关于XMLStarlet 命名空间定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com