首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmlstarlet选择值

xmlstarlet选择值
EN

Stack Overflow用户
提问于 2012-09-28 20:36:12
回答 1查看 35K关注 0票数 22

这是xml-data:

代码语言:javascript
复制
<DATA VERSION="1.0">
  <TABLES>
    <ITEM>
      <identifyer V="1234"></identifyer>
      <property1 V="abcde"></property1>
      <Property2 V="qwerty"></property2>
    </ITEM>
    <ITEM>
      <identifyer V="5678"></identifyer>
      <Property1 V="zyxwv"></property1>
      <Property2 V="dvorak"></property2>
    </ITEM>
  </TABLES>
</DATA>

我正在尝试查找identifyer具有值1234的项目的property2。我可以选择数据:

代码语言:javascript
复制
$ xmlstarlet sel -t -c "/DATA/TABLES/ITEM/identifyer [@V=1234]" test.xml 
<identifyer V="1234"/>

需要两种类型的输出:

代码语言:javascript
复制
$ xmlstarlet <some magic>
<identifyer V="1234"></identifyer>
<property1 V="abcde"></property1>
<Property2 V="qwerty"></property2>

和:

代码语言:javascript
复制
$ xmlstarlet <some magic>
qwerty
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-29 01:53:09

关键是从项目节点开始,而不是从标识符开始:

代码语言:javascript
复制
$ xmlstarlet sel -t -c "/DATA/TABLES/ITEM[identifyer/@V=1234]" test.xml
<ITEM>
  <identifyer V="1234"/>
  <property1 V="abcde"/>
  <Property2 V="qwerty"/>
</ITEM>

然后你可以挑选出你想要的部分:

代码语言:javascript
复制
$ xmlstarlet sel -t -c "/DATA/TABLES/ITEM[identifyer/@V=1234]/*" test.xml
<identifyer V="1234"/><property1 V="abcde"/><Property2 V="qwerty"/>

$ xmlstarlet sel -t -v "/DATA/TABLES/ITEM[identifyer/@V=1234]/Property2/@V" test.xml
qwerty
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12640152

复制
相关文章

相似问题

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