首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLStarlet名称空间定义

XMLStarlet名称空间定义
EN

Stack Overflow用户
提问于 2013-06-20 11:46:07
回答 2查看 2.3K关注 0票数 5

关于XMLStarlet的命名空间,我需要您的帮助。(从未见过解释不当的库)我有一个XML文件,如下所示:

代码语言:javascript
复制
<?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中的查询失败了。

代码语言:javascript
复制
xmlns="http://www.daisy.org/z3986/2005/ncx/"

我已经读过,您可以使用SED删除名称空间。就像这样:

代码语言:javascript
复制
cat Myfile.ncx | sed -e 's/ xmlns.*=".*"//g' | xmlstarlet ed -d "/ncx/navMap/navPoint[@playOrder='5']"

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

此外,我也尝试过这样做:

代码语言:javascript
复制
xmlstarlet -N x="http://www.daisy.org/z3986/2005/ncx/" ed -d "/ncx/navMap/navPoint[@playOrder='5']" Myfile.ncx

这不起作用。(也不明白x在x=“http.”中的含义。)我读了一些放了“我的”的东西,有些放了其他的价值。在XMLStarlet页面中没有这方面的手册页)

知道如何在这个XML文件中使用XMLStarlet并将名称空间保留在输出中吗?

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

(感谢帮助的人;)

EN

回答 2

Stack Overflow用户

发布于 2013-06-22 13:36:06

不明白x在x=“http.”中的含义我读了一些放了“我的”,有些放了其他的价值

x是您要给名称空间命名的名称。然后,您必须在查询中使用它:

代码语言:javascript
复制
xmlstarlet ed -N x="http://www.daisy.org/z3986/2005/ncx/" -d "/x:ncx/x:navMap/x:navPoint[@playOrder='5']" Myfile.ncx

正如@reinierpost所指出的,-N选项必须遵循ed命令。

..。在XMLStarlet页面中没有这方面的手册页

手册页相当缺乏,在用户指南第五章中有一个解释。

票数 4
EN

Stack Overflow用户

发布于 2017-06-28 18:06:07

从版本1.2.1开始,您可以使用de默认名称空间_

(删除-N参数)

代码语言:javascript
复制
xmlstarlet ed -d "/_:ncx/_:navMap/_:navPoint[@playOrder='5']" Myfile.ncx

如所解释的这里

1.3。更方便的解决方案 XML文档还可以对文档中的任何元素使用不同的命名空间前缀。为了更容易地处理名称空间,XMLStarlet (1.2.1+版本)将使用在输入文档的根元素上声明的命名空间前缀。默认名称空间将绑定到前缀"_“和”默认“(在版本1.5.0+中)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17212809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档