xmlstarlet 根据文本值选择同级

问题描述 投票:0回答:1

我一直在尝试用不同的选项来解决这个问题,但找不到正确的方法。 这是 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>

我希望能够获取以 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 应该如何实现这一点吗? 预先感谢您!

xml xpath xmlstarlet
1个回答
3
投票

将您的 XPath 更改为

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

您将根据要求选择具有值

x:name
ListView

© www.soinside.com 2019 - 2024. All rights reserved.