В этом посте показано, как преобразовать простой файл XML в CSV с помощью XSLT.
Рассмотрим следующий пример XML:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<library> <book> <author>Dan Simmons</author> <title>Hyperion</title> <publishDate>1989</publishDate> </book> <book> <author>Douglas Adams</author> <title>The Hitchhiker's Guide to the Galaxy</title> <publishDate>1979</publishDate> </book></library> |
Это желаемый выход CSV:
|
1
2
3
|
author,title,publishDateDan Simmons,Hyperion,1989Douglas Adams,The Hitchhiker's Guide to the Galaxy,1979 |
Следующая таблица стилей XSL (совместимая с XSLT 1.0) может использоваться для преобразования XML в CSV. Он довольно универсален и может быть легко настроен для обработки различных элементов XML путем изменения списка полей, определенных в начале.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?xml version="1.0" encoding="utf-8"?> <xsl:output method="text" /> <xsl:variable name="delimiter" select="','" /> <!-- define an array containing the fields we are interested in --> <xsl:variable name="fieldArray"> <field>author</field> <field>title</field> <field>publishDate</field> </xsl:variable> <xsl:param name="fields" select="document('')/*/xsl:variable[@name='fieldArray']/*" /> <xsl:template match="/"> <!-- output the header row --> <xsl:for-each select="$fields"> <xsl:if test="position() != 1"> <xsl:value-of select="$delimiter"/> </xsl:if> <xsl:value-of select="." /> </xsl:for-each> <!-- output newline --> <xsl:text></xsl:text> <xsl:apply-templates select="library/book"/> </xsl:template> <xsl:template match="book"> <xsl:variable name="currNode" select="." /> <!-- output the data row --> <!-- loop over the field names and find the value of each one in the xml --> <xsl:for-each select="$fields"> <xsl:if test="position() != 1"> <xsl:value-of select="$delimiter"/> </xsl:if> <xsl:value-of select="$currNode/*[name() = current()]" /> </xsl:for-each> <!-- output newline --> <xsl:text></xsl:text> </xsl:template></xsl:stylesheet> |
Давайте попробуем это:
|
1
2
3
4
|
$ xsltproc xml2csv.xsl books.xmlauthor,title,publishDateDan Simmons,Hyperion,1989Douglas Adams,The Hitchhiker's Guide to the Galaxy,1979 |
| Ссылка: | Преобразование XML в CSV с использованием XSLT 1.0 от нашего партнера по JCG Фахда Шарифа в блоге fahd.blog . |