xmlstarlet根据文本值选择同级

时间:2017-05-25 19:51:27

标签: xml xpath xmlstarlet

我一直试图通过不同的选项来解决这个问题,而且无法找到正确的方法。 这是xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
  <types>
        <members>PriceRule__c.All</members>
        <members>PriceRule__c.None</members>
        <members>ProductRule__c.All</members>
        <members>Quote__c.All_Quotes</members>
        <members>SummaryVariable__c.All</members>
        <name>ListView</name>
  </types>
  <types>
        <members>*</members>
        <name>AnalyticSnapshot</name>
  </types>
</Package>

我希望能够得到&#34; name&#34;的文字。属于相同&#34;类型的节点&#34;任何&#34;成员的节点&#34;以PriceRule__c开头的节点。 这是我能得到的最远的,实际上是找到这些节点的值:

echo $(xmlstarlet sel -N x="http://soap.sforce.com/2006/04/metadata" -t -v "//x:types/*[starts-with(text(),'PriceRule__c')]" test.xml)

打印出来:

PriceRule__c.All PriceRule__c.None

但我需要的是获取值 ListView 的方法 知道XPath应该如何实现吗? 提前谢谢!

1 个答案:

答案 0 :(得分:3)

将XPath更改为

//x:types[starts-with(x:members,'PriceRule__c')]/x:name

您将根据要求选择值为x:name的{​​{1}}。