xmlstarlet select 兄弟基于文本值
xmlstarlet select sibling based on text value
我一直试图通过不同的选择来解决这个问题,但找不到正确的方法。
这是 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 开头的任何 "members" 节点,我希望能够获取位于同一 "types" 节点中的 "name" 节点的文本。
这是我能得到的最远的实际找到这些节点的值:
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 应该如何得到它吗?
提前致谢!
将您的 XPath 更改为
//x:types[starts-with(x:members,'PriceRule__c')]/x:name
然后您将 select x:name
的值 ListView
,根据要求。
我一直试图通过不同的选择来解决这个问题,但找不到正确的方法。 这是 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 开头的任何 "members" 节点,我希望能够获取位于同一 "types" 节点中的 "name" 节点的文本。 这是我能得到的最远的实际找到这些节点的值:
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 应该如何得到它吗? 提前致谢!
将您的 XPath 更改为
//x:types[starts-with(x:members,'PriceRule__c')]/x:name
然后您将 select x:name
的值 ListView
,根据要求。