2016-02-27 52 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