我在使用xmllint时遇到了一些问题--xpath。 我不明白语法必须如何查找以下场景:
给出了以下XML:
<config>
<list name="User">
<listitem>
<variable name="Name">admin</variable>
<variable name="Domain">testdomain.ch</variable>
<variable name="Account_enabled">1</variable>
<variable name="Auth_type">0</variable>
<variable name="PIN"></variable>
<variable name="Rights">3</variable>
<variable name="Authorization">kms.autodelete.deleteditems.days=30</variable>
<variable name="Authorization">kms.autodelete.junkemail.days=30</variable>
<variable name="Groups">gruppe</variable>
<variable name="MailAddress">administrator</variable>
<variable name="ForwardMode">0</variable>
<variable name="HomeServer"></variable>
<variable name="MailboxLocation"></variable>
<variable name="Qstorage">0</variable>
<variable name="Qmessage">0</variable>
<variable name="MaxOutgoingMessageSize">0</variable>
<variable name="DefSpamFilter">1</variable>
<variable name="ReplyToAddress"></variable>
<variable name="Fullname">XXX</variable>
<variable name="Description"></variable>
<variable name="KrbUserPrincipalName"></variable>
</listitem>
<listitem>
<variable name="Name">postmaster</variable>
<variable name="Domain">testdomain2.ch</variable>
<variable name="Account_enabled">1</variable>
<variable name="Auth_type">0</variable>
<variable name="PIN"></variable>
<variable name="Rights">0</variable>
<variable name="Authorization">kms.webadmin</variable>
<variable name="ForwardMode">0</variable>
<variable name="HomeServer"></variable>
<variable name="MailboxLocation"></variable>
<variable name="Qstorage">0</variable>
<variable name="Qmessage">0</variable>
<variable name="MaxOutgoingMessageSize">0</variable>
<variable name="DefSpamFilter">1</variable>
<variable name="PreferredAddress"></variable>
<variable name="ReplyToAddress"></variable>
<variable name="Fullname"></variable>
<variable name="Description"></variable>
<variable name="KrbUserPrincipalName"></variable>
</listitem>
我需要获得以下输出:
Name;Domain;Rights
在此示例中,输出应为:
admin;testdomain.ch;3
postmaster;testdomain2.ch;0
谢谢你,最诚挚的问候, 菲利克斯
答案 0 :(得分:0)
schema
使用&gt;设置为字段分隔符,我们模式匹配“域”或“名称”或“权限”,然后如果满足这些条件,我们进一步拆分字符串基于&lt;作为分隔符。然后印有尾随;在所有情况下,除了添加尾随回车符时会遇到“权限”。
答案 1 :(得分:0)
I'm not sure if that's possible with xmllint. It's easy with xmlstarlet...
xmlstarlet sel -t -m "/config/list/listitem" -v "concat(variable[@name='Name'],';',variable[@name='Domain'],';',variable[@name='Rights'])" -n input.xml