使用XMLLINT在Bash中具有多个属性的解析XML

发布于 2025-01-20 18:13:19 字数 805 浏览 0 评论 0原文

我是Bash中XML解析的新手,我想在下面解析XML以获取Ident,Host和用户名属性的值。

<config>
   <connectionstring>
         <ftpconfig ident="testftp" host="ftphost" username="456def" password="abc123" localdir="/local/dir/test" />
   </connectionstring>
</config>

到目前为止,我可以使用XMLLINT获得单个属性的值。但是,这就是我想实现的目标。

第一。使用身份属性获取主机值。 - &gt;我使用这个实现了。

hostv=$(echo 'cat /config/connectionstring/ftpconfig[@ident="testftp"]/@host' | xmllint --shell myxml.xml | awk -F\" '/=/ { print $2; }')

第二。使用Ident和host属性获取用户名值 - &gt;这就是我被困的地方。我尝试了下面的不同方法。

userv=$(echo 'cat /config/connectionstring/ftpconfig[@ident="testftp"]/@host=\""$hostv"\"/@username' | xmllint --shell myxml.xml | awk -F\" '/=/ { print $2; }')

事先感谢您的帮助。

I am new in XML parsing in bash and I wanted to parse the xml below to get the values of ident, host and username attributes.

<config>
   <connectionstring>
         <ftpconfig ident="testftp" host="ftphost" username="456def" password="abc123" localdir="/local/dir/test" />
   </connectionstring>
</config>

So far, I can get the value of single attribute using xmllint. But, this is what I wanted to achieve.

1st. Get the host value using ident attribute. --> I achieve it using this.

hostv=$(echo 'cat /config/connectionstring/ftpconfig[@ident="testftp"]/@host' | xmllint --shell myxml.xml | awk -F\" '/=/ { print $2; }')

2nd. Get the username value using ident and host attribute --> this is where I am stuck. I tried different approaches like below.

userv=$(echo 'cat /config/connectionstring/ftpconfig[@ident="testftp"]/@host=\""$hostv"\"/@username' | xmllint --shell myxml.xml | awk -F\" '/=/ { print $2; }')

Thanks in advance for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

Hello爱情风 2025-01-27 18:13:19

那呢?

xmllint --xpath '/config/connectionstring/ftpconfig[@ident="testftp" and @host="ftphost"]/@username' myxml.xml
 username="456def"

并仅获取用户名属性的值,您可以使用string()

xmllint --xpath 'string(/config/connectionstring/ftpconfig[@ident="testftp" and @host="ftphost"]/@username)' file.xml
456def

What about this?

xmllint --xpath '/config/connectionstring/ftpconfig[@ident="testftp" and @host="ftphost"]/@username' myxml.xml
 username="456def"

And to get only the value of the username attribute you can use string():

xmllint --xpath 'string(/config/connectionstring/ftpconfig[@ident="testftp" and @host="ftphost"]/@username)' file.xml
456def
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文