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

XMLStarlet: MARC21的未定义名称空间前缀
EN

Stack Overflow用户
提问于 2020-11-14 21:56:25
回答 1查看 456关注 0票数 2

对于xml文件foo.xml

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8" ?>
    <record><header><identifier>oai:tib.eu:TIBKAT:010000011</identifier><datestamp>2020-10-12</datestamp><setSpec>tibkat</setSpec></header><metadata><marcxml:collection xmlns:marcxml="http://www.loc.gov/MARC21/slim">
      <marcxml:record>
        <marcxml:leader>Hello world</marcxml:leader> 
      </marcxml:record>
    </marcxml:collection>
    </metadata></record>

XMLStarlet查询

代码语言:javascript
复制
xmlstarlet sel -N xmlns="http://www.loc.gov/MARC21/slim" -t -v '//_:collection/_:record/_:leader[text()]' -nl foo.xml

由于未定义的命名空间前缀,导致出现错误消息:

未定义的命名空间前缀xmlXPathCompiledEval:计算失败的运行时错误:带有-param的元素无法计算变量'select‘的表达式。foo.xml无结果

为什么查询不起作用并传递"Hello“?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-14 23:08:38

您使用了错误的前缀(加上一个小错误):

代码语言:javascript
复制
xmlstarlet sel -N marcxml="http://www.loc.gov/MARC21/slim" -t -v '//marcxml:collection/marcxml:record/marcxml:leader[text()]' -nl foo.xml

或者,更简单:

代码语言:javascript
复制
xmlstarlet sel -t -v '//*[local-name()="leader"][text()]' -nl foo.xml

输出:

代码语言:javascript
复制
Hello world
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64839030

复制
相关文章

相似问题

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