BASH,xmlstarlet 如何在 XML 中检索值

BASH, xmlstarlet how to retrieve a value in XML

将 xmlstarlet 与 BASH 结合使用,我需要捕获存储在元素 Argument.value 中的数字,其中 Argument.name=Threads。 -感谢您的帮助。

<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>

修复 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