Преобразование XML в CSV с использованием XSLT - PullRequest
0 голосов
/ 16 августа 2011

Я новичок в XSLT и прошел через некоторые из предыдущих тем на SO Тема, которую я подписан

мои требования аналогичны, и мне нужно конвертировать XML в CSV, например, у меня следующий XML

<?xml version="1.0" encoding="UTF-8"?>
<impex>
<record>
<Employee/>
<UID>aa</UID>
<Name>HR Manager</Name>
<Groups/>
<Password>123456</Password>
</record>
<record>
<Employee/>
<UID>bb</UID>
<Name>HR Executive</Name>
<Groups/>
<Password>123456</Password>
</record>
</impex>

и мне нужно преобразовать этот XML в следующий вывод CSV

INSERT_UPDATE Employee;UID[unique=true];name;groups(uid);password
;"aa";"HR Manager";;"123456"
 ;"bb";"HR Executive";;"123456"

где мне нужно динамически управлять заголовками csv (на основе элементов xml)

additonaly Я также должен позаботиться, если некоторые значения отсутствуют, я могу предоставить их например отсутствует или его пусто, в таком случае мне нужно предоставить какое-то значение по умолчанию для сгенерированного CSV, так как этот CSV будет конечным выходом, который будет импортирован в систему

любая начальная помощь, с помощью которой я могу двигаться вперед, будет высоко ценится

1 Ответ

2 голосов
/ 16 августа 2011

Не самая красивая, но работает

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" />

<xsl:template match="/impex">
    <xsl:text>INSERT_UPDATE </xsl:text>
    <xsl:apply-templates select="record[1]/*" mode="header"/>
    <xsl:apply-templates select="record" />
</xsl:template>


<xsl:template match="*" mode="header" >
    <xsl:value-of select="name()"/>
    <xsl:choose>
        <xsl:when test="position()=last()">
            <xsl:text>&#10;</xsl:text>
        </xsl:when>
        <xsl:otherwise>;</xsl:otherwise>
    </xsl:choose>
</xsl:template>

<xsl:template match="record">
    <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="*" >
    <xsl:value-of select="."/>
    <xsl:choose>
        <xsl:when test="position()=last()">
            <xsl:text>&#10;</xsl:text>
        </xsl:when>
        <xsl:otherwise>;</xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...