首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmlstarlet不返回特定元素的任何值。

xmlstarlet不返回特定元素的任何值。
EN

Stack Overflow用户
提问于 2013-12-05 05:32:58
回答 2查看 795关注 0票数 1

正在发生以下情况:

按预期工作的文件:

列出xml中的内容:

代码语言:javascript
复制
# xmlstarlet el -a table.xml
table
table/rec
table/rec/@id
table/rec/numField
table/rec/stringField
table/rec
table/rec/@id
table/rec/numField
table/rec/stringField
table/rec
table/rec/@id
table/rec/numField
table/rec/stringField

选择特定元素:

代码语言:javascript
复制
# xmlstarlet sel -t -v "//table/rec/numField" table.xml
123
346
-23

原始数据:

代码语言:javascript
复制
#cat table.xml
<?xml version="1.0" encoding="UTF-8"?>
<table>
  <rec id="1">
    <numField>123</numField>
    <stringField>String Value</stringField>
  </rec>
  <rec id="2">
    <numField>346</numField>
    <stringField>Text Value</stringField>
  </rec>
    <rec id="3">
    <numField>-23</numField>
    <stringField>stringValue</stringField>
  </rec>
</table>

下一次使用test.xml运行

代码语言:javascript
复制
# xmlstarlet el -a test.xml

filelists
filelists/@xmlns
filelists/@packages
filelists/package
filelists/package/@pkgid
filelists/package/@name
filelists/package/@arch
filelists/package/version
filelists/package/version/@epoch
filelists/package/version/@ver
filelists/package/version/@rel
filelists/package/file
filelists/package/file
filelists/package/file
filelists/package/file
filelists/package/file/@type

查询方式与前面的查询方式相同:

代码语言:javascript
复制
# xmlstarlet sel -t -v "//filelists/package/file" test.xml
#

文件的内容:

代码语言:javascript
复制
#cat test.xml
<?xml version="1.0" encoding="UTF-8"?>
  <filelists xmlns="http://linux.duke.edu/metadata/filelists" packages="8">
    <package pkgid="fc2a76ba4e6e0b2bc704b9e7bcb205ca1c11e93b" name="bigtop-utils" arch="noarch">
      <version epoch="0" ver="0.4+300" rel="1.cdh4.0.1.p0.1.el6"/>
      <file>/etc/default/bigtop-utils</file>
      <file>/usr/libexec/bigtop-detect-javahome</file>
      <file>/usr/share/doc/bigtop-utils-0.4+300/LICENSE</file>
      <file type="dir">/usr/share/doc/bigtop-utils-0.4+300</file>
    </package>
  </filelists>

I guess I don't get something here.

为什么我不能显示那些文件标签的内容?我一定要逃避吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-05 23:06:48

您必须使用-N开关声明名称空间,并将其用于其作用域内的所有元素(请注意,为了避免markdown滚动,我已将命令拆分成行):

代码语言:javascript
复制
xmlstarlet sel \
    -N 'x=http://linux.duke.edu/metadata/filelists' \
    -t \
    -v \
    "//x:filelists/x:package/x:file" \
test.xml

它产生:

代码语言:javascript
复制
/etc/default/bigtop-utils
/usr/libexec/bigtop-detect-javahome
/usr/share/doc/bigtop-utils-0.4+300/LICENSE
/usr/share/doc/bigtop-utils-0.4+300
票数 2
EN

Stack Overflow用户

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

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

(删除-N参数)

代码语言:javascript
复制
xmlstarlet sel -t -v "//_:filelists/_:package/_:file" test.xml

如所解释的这里

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

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

https://stackoverflow.com/questions/20392228

复制
相关文章

相似问题

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