Bash脚本:从XML文件和解析属性中读取某个多行标记

时间:2013-01-08 07:37:56

标签: xml bash

我必须从XML文件中读取特定的标记属性并将它们返回到Template-Document 我已经完成了读取文件本身,现在我怎样才能读取一个标签并解析其属性?

<?xml version="1.0" encoding="UTF-8"?>
<instances
name="instance-name"
port="60535"
username="bar"
password="foo"
string_var="barfoo">
some xml (up to 5k lines and 3 k elements i do not need)
</instances>

在遇到“&gt;”之前,我该如何阅读字符串?为实例?如何将值放入变量?

通缉输出:

TPAR_PORT = 60535
TPAR_USERNAME = bar
TPAR_PASSWORD = foo
TPAR_INSTANCE = instance-name

顺便说一下,如果值带或不带单引号

,则无关紧要

2 个答案:

答案 0 :(得分:1)

使用正确的XML解析器。您的示例不是格式良好的XML,但XML语句中不允许使用foobar,它必须以?>结尾,而不是简单的>。此外,应使用encoding代替charset

修复文件后,您可以开始使用正确的工具。

<?xml version="1.0" charset="UTF-8"?>
<instances
name="instance-name"
port="60535"
username="bar"
password="foo"
string_var="barfoo">
some xml
</instances>

例如,您可以使用xmllint及其--shell选项:

$ xmllint 1.xml --shell  <<<'cat /instances/@port'
/ > cat /instances/@port
 -------
 port="60535"
/ >

我最喜欢的工具是xsh

$ xsh <<<'open 1.xml ; echo /instances/@port'
60535

答案 1 :(得分:0)

这个怎么样

while read
do
  eval $REPLY 2>/dev/null
done < a.xml