对于下面的xml,我需要将<studentName>CLASSA</studentName>
替换为<studentStatus>failed</studentStatus>
。
<studentFile>
<student>
<studentName>CLASSA</studentName>
<studentStatus>Success</studentStatus>
<studentActions>
<studentAction>
<studentType>Juniour</studentType>
<studentStatus>Completed</studentStatus>
<studentMsg/>
</studentAction>
<studentAction>
<studentType>HighSchool</studentType>
<studentStatus>Completed</studentStatus>
<studentMsg/>
</studentAction>
</studentActions>
</student>
<student>
<studentName>CLASSB</studentName>
<studentStatus>Success</studentStatus>
<studentActions>
<studentAction>
<studentType>Senior</studentType>
<studentStatus>Completed</studentStatus>
</studentAction>
<studentAction>
<studentType>Middle</studentType>
<studentStatus>Completed</studentStatus>
</studentAction>
</studentActions>
</student>
</studentFile>
目前为止
xmllint -xpath "/studentFile/student[studentName='CLASSA']/studentActions/studentAction[studentType="Juniour"]/studentStatus" myxml.xml
现在我得到了学生的状态为已完成,现在这个值应该改为失败。仅适用于<studentType>Juniour</studentType>
。我应该如何编辑xml以便得到它,
<studentFile>
<student>
<studentName>CLASSA</studentName>
<studentStatus>Success</studentStatus>
<studentActions>
<studentAction>
<studentType>Juniour</studentType>
<studentStatus>Failed</studentStatus>
<studentMsg/>
</studentAction>
<studentAction>
<studentType>HighSchool</studentType>
<studentStatus>Completed</studentStatus>
<studentMsg/>
</studentAction>
</studentActions>
</student>
<student>
<studentName>CLASSB</studentName>
<studentStatus>Success</studentStatus>
<studentActions>
<studentAction>
<studentType>Senior</studentType>
<studentStatus>Completed</studentStatus>
</studentAction>
<studentAction>
<studentType>Middle</studentType>
<studentStatus>Completed</studentStatus>
</studentAction>
</studentActions>
</student>
</studentFile>
我知道有像xsltproc这样的工具,但不确定我们集群中的所有节点是否都安装了这个工具。
任何帮助将不胜感激。提前感谢!
5条答案
按热度按时间7cjasjjr1#
用
file.xml
中的xmllint
更新值:如果没有here document:
更新:在变量中使用bash和XML:
或没有此处文档:
t3irkdon2#
xlmlint
,顾名思义,是用于解析和验证XML,而不是编辑它。如果您可以在集群上安装xmlstarlet
,您可以执行以下操作:oxf4rvwz3#
如果xmlstarlet(一个查询/编辑/检查/转换XML文档的命令行工具包)是可访问的:
上面的代码将输出初始XML文档,并进行所需的替换
命令详细信息:
ed -u
-编辑/更新模式//studentAction/studentStatus
- xpath表达式,用于选择studentStatus
元素,该元素具有:preceding-sibling::studentType[1][text() = 'Juniour']
-前一个兄弟元素studentType
,值为Juniour
ancestor::student/studentName[text() = 'CLASSA']
-最近的元素studentName
,值为CLASSA
dgtucam14#
你可以试试我的Xembly命令行工具:
Xembly的完整语法是here。
dfty9e195#
使用
--shell
通过xmlint更新xml文件。您可以使用以下命令来进行bash: