1

我必须从 XML 文件中读取特定的标签属性并将它们返回给模板文档。
我已经读完了文件本身,现在我怎样才能只读取一个标签并解析它的属性?

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

在遇到“>”之前如何读取字符串?以及如何将值放入变量中?

想要的输出:

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

顺便说一句,值是否带有单引号都没有关系

4

2 回答 2

1

使用适当的 XML 解析器。但是,您的示例不是格式正确的 XML:foo并且bar不允许在 XML 声明中使用,该声明必须以 . 结尾?>,而不是简单的>. 此外,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
于 2013-01-08T08:49:08.377 回答
0

这个怎么样

while read
do
  eval $REPLY 2>/dev/null
done < a.xml
于 2013-01-08T09:10:02.547 回答