how to parse xml as an argument to a shell script

use*_*747 1 xml shell-script

this is the sample xml file I have, I need to get max_size as an output?

I tried using xlimit and xpath , both not working.

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-service>
   <service_info name="dummyapp" version="5.0"
   <object name="WebApplications">
      <item Location="dummyapp/ear/dummyapp.ear" name="dummy"/>
   </object>
   <object name="jdbc_oracle_nonxa">
      <item db_name="MYDB1" db_user="dummyapp_user" global_trans="None" initial_size="10" jndi_name="dummyapp-aty-ds" max_size="25" name="dummyapp-aty-ds" statement_cache_size="10"/>
</object>
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 5

假设 XML 格式良好,例如

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-service>
  <service_info name="dummyapp" version="5.0"/>
  <object name="WebApplications">
    <item Location="dummyapp/ear/dummyapp.ear" name="dummy"/>
  </object>
  <object name="jdbc_oracle_nonxa">
    <item db_name="MYDB1" db_user="dummyapp_user" global_trans="None" initial_size="10" jndi_name="dummyapp-aty-ds" max_size="25" name="dummyapp-aty-ds" statement_cache_size="10"/>
  </object>
</weblogic-service>
Run Code Online (Sandbox Code Playgroud)

(我关闭了问题中未关闭的标签)

...然后将输出以下内容25(对于此示例):

xml sel -t -v '//item/@max_size' -nl file.xml
Run Code Online (Sandbox Code Playgroud)

这是使用XMLStarlet来获取max_value所有item节点的属性值。最后-nl在输出后插入一个换行符。

如果您需要更具体并且只查看item节点中的object节点,其namejdbc_oracle_nonxa

xml sel -t -v '//object[@name="jdbc_oracle_nonxa"]/item/@max_size' -nl file.xml
Run Code Online (Sandbox Code Playgroud)

请注意,XMLStarlet 安装在某些系统上,xmlstarlet而不是安装xml在某些系统上。


使用xmllint(输出结束时没有换行符):

xmllint --xpath 'string(//object[@name="jdbc_oracle_nonxa"]/item/@max_size)' file.xml
Run Code Online (Sandbox Code Playgroud)