2016-02-22 3 views
4

Я нашел пример преобразования XML в CSV, В примере используется, эта структураПреобразование XML в CSV с помощью Scriptella, как получить значения атрибута?

<!-- Demo input for ETL --> 
<CATALOG> 
    <CD> 
     <TITLE>Empire Burlesque</TITLE> 
     <ARTIST>Bob Dylan</ARTIST> 
     <COUNTRY>USA</COUNTRY> 
     <COMPANY>Columbia</COMPANY> 
     <PRICE>10.90</PRICE> 
     <YEAR>1985</YEAR> 
    </CD> 
</CATALOG> 

В этом файле структуры, Scriptella код:

<script connection-id="out">Title;Artist;Country;Company;Price;Year</script> 
<query connection-id="in"> 
    <!--XPath which all CD elements in a catalog--> 
    /CATALOG/CD 
    <!--Outputs all matched elements--> 
    <script connection-id="out" if="rownum>1">$TITLE;$ARTIST;$COUNTRY;$COMPANY;$PRICE;$YEAR</script> 
</script> 

Как я могу преобразовать файл XML, который имеет следующая структура

<CATALOG> 
    <CD title='Empire Burlesque' artist='Bob Dylan' country='USA'/> 
    ............. 
    <CD title='Empire Burlesque' artist='Bob Dylan' country='USA'/> 
</CATALOG> 

Как получить значения атрибутов в XML?

+0

Посмотрите [здесь] (http://stackoverflow.com/questions/21486352/scriptella-xml-to-db-insert-into-from-xpath), ответ предполагает, что вы можете использовать специальный ['узел 'variable] (http://scriptella.javaforge.com/docs/api/scriptella/driver/xpath/NodeVariable.html) следующим образом:'? {node.getString ("./@ title")} '. У меня нет Scriptella, поэтому я не могу написать проверенный ответ, но вы можете отправить свой ответ сразу, как только вы придумали, как именно интегрировать его в свой выходной скрипт. – Tomalak

ответ

0

Вам необходимо сначала правильно описать драйверы для всех ваших подключений. Вы не можете анализировать XML с помощью Scriptella, если вы не используете драйвер xpath. Более подробная информация здесь: http://scriptella.org/reference/drivers.html

Теперь для волшебных битов: - вы можете использовать Java библиотеки как альтернативные возможности, но так как эти 2 поддерживаются драйверы из коробки, я предлагаю пойти с ними - вы хотите импортировать XML -> драйвер XPath необходим - вы хотите экспортировать CSV -> CSV драйвер нужен - водитель текста может также использоваться для вывода данных в формате CSV, но вы должны обрабатывать кавычки и разделители вручную

Если XML данные находятся в файле data.xml, и вы хотите экспортировать его как данные csv в файл data.csv, я бы предложил использовать следующий скрипт scriptella etl:

<!DOCTYPE etl SYSTEM "http://scriptella.javaforge.com/dtd/etl.dtd"> 
<etl> 
    <connection id="in" driver="xpath" url="data.xml" /> 
    <connection id="out" driver="csv" url="data.csv"> 
    quote= 
    separator=; 
    </connection> 
    <script connection-id="out"> 
    TITLE,ARTIST,COUNTRY,COMPANY,PRICE,YEAR 
    </script> 
    <query connection-id="in"> 
    /CATALOG/CD 
    <script connection-id="out"> 
     $TITLE,$ARTIST,$COUNTRY,$COMPANY,$PRICE,$YEAR 
    </script> 
    </query> 
</etl> 

Обратите внимание на случай, используемый в источнике XML. Вы должны использовать $TITLE, а не $title, ни $Title, так как <TITLE> присутствует в вашем источнике XML.

Тестирование rownum не требуется для такой задачи ETL.