我需要從復雜的 XML 檔案中提取組資訊,然后遍歷組以執行一些更改,但我無法以干凈的方式獲取資料以進行回圈。嘗試了很多,看到了很多例子,但沒有運氣。任何幫助表示贊賞。
給定以下 XML 檔案:
<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.12.xsd">
<pagination pageNumber="1" pageSize="100" totalAvailable="12"/>
<groups>
<group id="74c29008-7550-11eb-94d7-73020b27aff3" name="Todos os usuários">
<domain name="local"/>
</group>
<group id="e392c24a-535d-4e78-8463-0a492d61c317" name="Tbv_Vs_Operacoes">
<domain name="university.net"/>
<import domainName="university.net" siteRole="Viewer" grantLicenseMode="onLogin"/>
</group>
<group id="6c236376-aa1b-451e-8b63-488387aac20b" name="Tbv_Alertas_Inteligentes">
<domain name="university.net"/>
<import domainName="university.net" siteRole="Viewer" grantLicenseMode="onLogin"/>
</group>
<group id="58c86b3e-e1b2-46e5-9acf-43335de1c58d" name="TBE_VS_OPERACOES">
<domain name="university.net"/>
<import domainName="university.net" siteRole="ExplorerCanPublish" grantLicenseMode="onLogin"/>
</group>
<group id="89c33fb6-dce9-4097-9be8-f01d502cc11b" name="Tbl_Server_Admin_Creator">
<domain name="university.net"/>
<import domainName="university.net" siteRole="SiteAdministratorExplorer" grantLicenseMode="onLogin"/>
</group>
<group id="306dac3b-a377-451f-9283-c7be3533e02f" name="Tbv_Vs_Canais_Nao_Proprietarios">
<domain name="university.net"/>
<import domainName="university.net" siteRole="Viewer" grantLicenseMode="onSync"/>
</group>
<group id="9259961c-3ca7-4c1a-9c44-374a4555c270" name="Tbe_Vs_Canais_Nao_Proprietarios">
<domain name="university.net"/>
<import domainName="university.net" siteRole="Explorer" grantLicenseMode="onSync"/>
</group>
</groups>
</tsResponse>
如何獲得類似于下面 csv 的輸出,每組一行和 4 列:id、name、siteRole 和 grantlicenseMode?
74c29008-7550-11eb-94d7-73020b27aff3,Todos os usuários,,
e392c24a-535d-4e78-8463-0a492d61c317,Tbv_Vs_Operacoes,Viewer,onLogin
6c236376-aa1b-451e-8b63-488387aac20b,Tbv_Alertas_Inteligentes,Viewer,onLogin
58c86b3e-e1b2-46e5-9acf-43335de1c58d,TBE_VS_OPERACOES,ExplorerCanPublish,onLogin
...
我設法使用以下命令輸出“組”節點內的值:
xmlstarlet sel -N api=http://tableau.com/api -T -t -m //api:group -v "concat(@id,';',@name,';',import/@siteRole,';',import/@grantLicenseMode)" -n groups.xml
74c29008-7550-11eb-94d7-73020b27aff3;Todos os usuários;;
e392c24a-535d-4e78-8463-0a492d61c317;Tbv_Vs_Operacoes;;
6c236376-aa1b-451e-8b63-488387aac20b;Tbv_Alertas_Inteligentes;;
58c86b3e-e1b2-46e5-9acf-43335de1c58d;TBE_VS_OPERACOES;;
89c33fb6-dce9-4097-9be8-f01d502cc11b;Tbl_Server_Admin_Creator;;
306dac3b-a377-451f-9283-c7be3533e02f;Tbv_Vs_Canais_Nao_Proprietarios;;
9259961c-3ca7-4c1a-9c44-374a4555c270;Tbe_Vs_Canais_Nao_Proprietarios;;
6ed1b848-3206-4723-8b3b-7721a9869f53;Tbe_VS_Financeiro;;
701a819f-f176-4807-ad2c-572b970a9f8f;Tbv_VS_Financeiro;;
232613c8-9129-493c-b2af-a65c1d82d88a;Tbe_VS_Consumidor_CRM;;
c9346a0e-4f7a-4e53-95b4-71d7ef4c4e3b;Tbe_Vs_Demanda_e_Abastecimento;;
f8345037-4153-4303-bdb7-39ca3bee32ee;QlikSense_Sustent_BI;;
但正如您在上面看到的,我無法獲得 @siteRole 和 @grantLicenseMode 的值,它們都在子節點“import”上。
uj5u.com熱心網友回復:
我建議:
xmlstarlet select -N x="http://tableau.com/api" --text --template \
--match "//x:tsResponse/x:groups/x:group" \
--value-of "concat(@id,',',@name,',',x:import/@siteRole,',',x:import/@grantLicenseMode)" \
-n file.xml
輸出:
74c29008-7550-11eb-94d7-73020b27aff3,Todos os usuários,,
e392c24a-535d-4e78-8463-0a492d61c317,Tbv_Vs_Operacoes,Viewer,onLogin
6c236376-aa1b-451e-8b63-488387aac20b,Tbv_Alertas_Inteligentes,Viewer,onLogin
58c86b3e-e1b2-46e5-9acf-43335de1c58d,TBE_VS_OPERACOES,ExplorerCanPublish,onLogin
89c33fb6-dce9-4097-9be8-f01d502cc11b,Tbl_Server_Admin_Creator,SiteAdministratorExplorer,onLogin
306dac3b-a377-451f-9283-c7be3533e02f,Tbv_Vs_Canais_Nao_Proprietarios,Viewer,onSync
9259961c-3ca7-4c1a-9c44-374a4555c270,Tbe_Vs_Canais_Nao_Proprietarios,Explorer,onSync
看: xmlstarlet select --help
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339531.html
標籤:文件 xml 命名空间 xmlstarlet
