STXでXMLからCSVに
STX : Streaming Transformations for XML
STXをつかってXMLからCSV
MLにサンプルっぽのがあった。
http://archive.gingerall.cz/archives/public/stx2004/msg00079.html
謎なのでとりあえずちょびっといじって、OKって事にした。
<?xml version="1.0"?> <person> <name>xxx</name> <email>yyy</email> <phone>zzz</phone> </person>
<?xml version="1.0"?> <!-- join example --> <stx:transform xmlns:stx="http://stx.sourceforge.net/2002/ns" version="1.0" pass-through="text"> <stx:variable name="names" select="('name', 'email', 'phone')" /> <stx:variable name="values" /> <stx:procedure name="init"> <stx:assign name="values" select="()" /> <stx:for-each-item select="$names" name="i"> <stx:assign name="values" select="('', $values)" /> </stx:for-each-item> </stx:procedure> <stx:template match="name|email|phone"> <!-- or "person/*" --> <stx:variable name="no" select="1" /> <stx:for-each-item select="$names" name="i"> <stx:if test="$i = name()"> <stx:assign name="values" select="(subsequence($values, 1, $no - 1), ., subsequence($values, $no +1))" /> </stx:if> <stx:assign name="no" select="$no + 1" /> </stx:for-each-item> </stx:template> <stx:template match="person"> <stx:call-procedure name="init" /> <stx:process-children /> <stx:value-of select="$values" separator=", " /> <stx:text>
</stx:text> </stx:template> </stx:transform>
とか適当なこと書いてたけど stxはほとんどからっぽでも、中身解析してそのままだしてくれる
<?xml version="1.0"?> <stx:transform xmlns:stx="http://stx.sourceforge.net/2002/ns" version="1.0" xmlns:d="http://purl.org/dc/elements/1.0/" pass-through="text"> </stx:transform>
ただ
みたいな形だとちゃんとやらないとだめっぽ
XML::STX http://search.cpan.org/~pcimprich/XML-STX-0.43/STX.pm
しかしほんとSTXないとちまちまファイル分割したり、しかも分割してタグが途中だったりとか・・ STXすばらしす