2016-02-27 50 views
2

使用带有BASH的xmlstarlet,我需要捕获存储在元素Argument.value中的数字,其中Argument.name = Threads。 -谢谢你的帮助。BASH,xmlstarlet如何检索XML中的值

<stringProp name="Argument.name">Threads</stringProp> 
<stringProp name="Argument.value">99</stringProp> 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067"> 
<hashTree> 
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> 
    <stringProp name="TestPlan.comments"></stringProp> 
    <boolProp name="TestPlan.functional_mode">false</boolProp> 
    <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> 
    <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> 
    <collectionProp name="Arguments.arguments"/> 
    </elementProp> 
    <stringProp name="TestPlan.user_define_classpath"></stringProp> 
</TestPlan> 
<hashTree> 
    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> 
    <collectionProp name="Arguments.arguments"> 
     <elementProp name="Threads" elementType="Argument"> 
     <stringProp name="Argument.name">Threads</stringProp> 
     <stringProp name="Argument.value">99</stringProp> 
     <stringProp name="Argument.desc">test1</stringProp> 
     <stringProp name="Argument.metadata">=</stringProp> 
     </elementProp> 
    </collectionProp> 
    </Arguments> 
    <hashTree/> 
</hashTree> 

+0

修复您的XML第一:'xmlstarlet格式file.xml'显示错误。 –

回答

1

一旦你解决您的XML,它成为一个XPath问题。任何这些应该工作:

xmlstarlet sel -t -v '//stringProp[@name="Argument.value" and ../stringProp[@name="Argument.name"] = "Threads"]' file.xml 
xmlstarlet sel -t -v '//stringProp[@name="Argument.name" = "Threads"]/../stringProp[@name="Argument.value"]' file.xml 
xmlstarlet sel -t -v '//elementProp[./stringProp[@name="Argument.name"] = "Threads"]/stringProp[@name="Argument.value"]' file.xml