Есть XML-конфиг, который нужно по строкам записать в CSV-таблицу. Каждый объект это правило, которое надо перенести в таблицу. Сложность в том, что количество Суб-Объектов в каждом объекте различаются. И если в одном правиле совпадет Тег, то эти значения надо будет записать в одну ячейку.
Ниже демонстрирую начало и конец xml. файла.
<config>
<list name="TrafficRules_v2" identityCounter="777">
<listitem>
<variable name="Id">1</variable>
<variable name="Order">509</variable>
<variable name="Enabled">1</variable>
<variable name="Color">FFCCCC</variable>
<variable name="Name">VPN Services</variable>
<variable name="Description">Allows access to VPN</variable>
<variable name="IpVersion">4</variable>
<variable name="Dst">Firewall</variable>
<variable name="Proxy">default</variable>
<variable name="Service">"IPsec services" "Kerio VPN" </variable>
<variable name="ValidTime"></variable>
<variable name="Action">PERMIT,logpkt,logconn</variable>
<variable name="NAT">4</variable>
<variable name="SNAT"></variable>
<variable name="DNAT"></variable>
</listitem>
<listitem>
<variable name="Id">2</variable>
<variable name="Order">510</variable>
<variable name="Enabled">1</variable>
<variable name="Color">FFCCCC</variable>
<variable name="Name">Web Services</variable>
<variable name="Description">Allows access to HTTP and HTTPS from the Internet.</variable>
<variable name="IpVersion">4</variable>
<variable name="Dst">Firewall</variable>
<variable name="Proxy">default</variable>
<variable name="Service">"HTTP" "HTTPS" </variable>
<variable name="ValidTime"></variable>
<variable name="Action">PERMIT,chart,logconn</variable>
<variable name="NAT">4</variable>
<variable name="SNAT"></variable>
<variable name="DNAT"></variable>
</listitem>
<listitem>
<variable name="Id">3</variable>
<variable name="Order">511</variable>
<variable name="Enabled">1</variable>
<variable name="Color">C9EEC6</variable>
<variable name="Name">VPN Internet access (NAT)</variable>
<variable name="Description">Enables access from local machines and VPN clients to the Internet using address translation.</variable>
<variable name="IpVersion">4</variable>
<variable name="Src">user:"6sada6d9-bc8e-0b4e-dsdx-sdsadqwd97"</variable>
<variable name="Dst">ifgroup:"internet"</variable>
<variable name="Proxy">default</variable>
<variable name="Service"></variable>
<variable name="ValidTime"></variable>
<variable name="Action">PERMIT,chart,logconn</variable>
<variable name="NAT">4</variable>
<variable name="SNAT">auto</variable>
<variable name="DNAT"></variable>
</listitem>
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
<listitem>
<variable name="Id">3807</variable>
<variable name="Order">6</variable>
<variable name="Enabled">1</variable>
<variable name="Color">FFFFFF</variable>
<variable name="Name">Avay-IN</variable>
<variable name="Description"></variable>
<variable name="IpVersion">0</variable>
<variable name="Src">prefix:"172.1.1.0/23"</variable>
<variable name="Src">prefix:"192.1.1.0/23"</variable>
<variable name="Src">prefix:"192.1.1.0/24"</variable>
<variable name="Src">prefix:"172.1.1.0/24"</variable>
<variable name="Dst">10.101.10.10</variable>
<variable name="Proxy">default</variable>
<variable name="Service"></variable>
<variable name="ValidTime"></variable>
<variable name="Action">PERMIT</variable>
<variable name="NAT">4</variable>
<variable name="SNAT"></variable>
<variable name="DNAT"></variable>
</listitem>
<listitem>
<variable name="Id">3808</variable>
<variable name="Order">5</variable>
<variable name="Enabled">1</variable>
<variable name="Color">FFFFFF</variable>
<variable name="Name">media-NET-to-PC-IN</variable>
<variable name="Description"></variable>
<variable name="IpVersion">0</variable>
<variable name="Src">prefix:"192.168.1.0/24"</variable>
<variable name="Dst">192.168.120.25</variable>
<variable name="Proxy">default</variable>
<variable name="Service">tcp:3389 </variable>
<variable name="ValidTime"></variable>
<variable name="Action">PERMIT</variable>
<variable name="NAT">4</variable>
<variable name="SNAT"></variable>
<variable name="DNAT"></variable>
</listitem>
</list>
Подскажите, какой библиотекой лучше воспользоваться для парсинга данных с xml в CSV? И есть ли аргумент для подсчета объектов в каждом древе?