Мне нужно преобразовать XML в CSV, однако преобразование для меня довольно сложно.
Это пример XML:
<?xml version="1.0" encoding="windows-1251"?>
<message text="Contract [number] of [sum] [currency] till [deadline]" report="someone@lost.com">
<customer mobile="X69931232">
<contract number="FL1-22/Ml">
<sum>21,55</sum>
<currency>USD</currency>
<deadline>30.09.2011</deadline>
</contract>
</customer>
<customer mobile="X79484483">
<contract number="FL1-24">
<sum>329,44</sum>
<currency>EUR</currency>
<deadline>30.12.2011</deadline>
</contract>
<contract number="FL1-27">
<sum>232,91</sum>
<currency>EUR</currency>
<deadline>30.12.2011</deadline>
</contract>
</customer>
<customer mobile="X69502060, X79484483">
<contract number="FL1-07">
<sum>42,17</sum>
<currency>USD</currency>
<deadline>30.09.2011</deadline>
</contract>
</customer>
<customer mobile="X69931232, X79484483">
<contract number="FL2-01/M2">
<sum>40,84</sum>
<currency>EUR</currency>
<deadline>30.09.2011</deadline>
</contract>
<contract number="FL1-18">
<sum>198,45</sum>
<currency>EUR</currency>
<deadline>30.11.2011</deadline>
</contract>
</customer>
</message>
И образец CSV должен выглядеть следующим образом:
X69931232,Contract FL1-22/Ml sum of 21,55 USD till 30.09.2011
X79484483,Contract FL1-24 sum of 329,44 EUR till 30.12.2011; FL1-27 sum of 232,91 EUR till 30.09.2011
X69502060,Contract FL1-07 sum of 42,17 USD till 30.09.2011
X79484483,Contract FL1-07 sum of 42,17 USD till 30.09.2011
X69931232,Contract FL2-01/M2 sum of 40,84 EUR till 30.09.2011; FL1-18 sum of 198,45 EUR till 30.11.2011
X79484483,Contract FL2-01/M2 sum of 40,84 EUR till 30.09.2011; FL1-18 sum of 198,45 EUR till 30.11.2011
Мой текущий XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
Phone,Message
<xsl:for-each select="/message/customer">
<xsl:sort order="ascending" select="contract/@number"/>
<xsl:value-of select="/message/customer/@mobile"/>,
Contract <xsl:value-of select="contract/@number"/> sum of <xsl:value-of select="contract/sum"/>
<xsl:value-of select="contract/currency"/> till <xsl:value-of select="contract/deadline"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Если мобильный атрибут содержит более одного числа,чем текст должен быть одинаковым для обоих;Если на одного клиента приходится более одного контракта, отправьте его как новую строку.В примере файла я показал все возможные варианты.
Заранее спасибо !!!