2017-07-10 4 views
0

xmllint --xpathにいくつかの問題があります。xmllintで複数のリスト項目の中の変数から複数の値を取得する

次の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 

ありがとうございますこれらの条件が満たされた場合、フィールド区切り文字、「ドメイン」または「名前」OR「権利」のための我々パターンマッチとして設定してフェリックス

+0

あなたは実行しようとしたものを教えてください。 – Arount

答えて

0

xmllintで可能かどうかはわかりません。 xmlstarlet ...

xmlstarlet sel -t -m "/config/list/listitem" -v "concat(variable[@name='Name'],';',variable[@name='Domain'],';',variable[@name='Rights'])" -n input.xml 
+0

ありがとうございました!私のために働く:-) –

0
awk -F\> '$0 ~ /"Domain"/ || $0 ~ /"Name"/ || $0 ~ /"Rights"/ { split($2,slts,"<");if ($0 ~ /"Rights"/) { printf "%s\n",slts[1] } else { printf "%s;",slts[1] } } ' filename 

>はその後、我々はさらに、区切り文字として<に基づいて文字列を分割しました。これは、後ろに印刷されます。それ以外のすべてのケースで、末尾に改行が追加されると「権利」が発生します。

関連する問題