我有以下从 Oracle-DB 导出的 XML 文件:http: //pastebin.com/0yPcc7HT
我需要将其转换为以下结构:
<?xml version="1.0" encoding="UTF-8"?>
<ROWSET>
<KUNDE>
<KUNDENNR>59957</KUNDENNR>
<ANSPRECHPARTNERS>
<ANSPRECHPARTNER>
<ANSPRECHNR>3</ANSPRECHNR>
<FUNKTION>lfd. Kontakt, </FUNKTION>
<VORNAME>Some </VORNAME>
<NACHNAME>Dude </NACHNAME>
<ABTEILUNG>Einkauf </ABTEILUNG>
<EMAIL>Some.Dude@some.url.com</EMAIL>
<TELEFON>123456789</TELEFON>
<PREISLISTEN>
<PREISLISTE>Katalog </PREISLISTE>
<PREISLISTE>Y OO </PREISLISTE>
<PREISLISTE>Kopierpapier "A" </PREISLISTE>
<PREISLISTE>Aktion Internet </PREISLISTE>
<PREISLISTE>Tinte Toner "H" </PREISLISTE>
<PREISLISTE>News Internet </PREISLISTE>
</PREISLISTEN>
<SPESEN>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
</SPESEN>
</ANSPRECHPARTNER>
<ANSPRECHPARTNER>
<ANSPRECHNR>1</ANSPRECHNR>
<FUNKTION>Sachbearbeitung </FUNKTION>
<VORNAME>Another </VORNAME>
<NACHNAME>Dudarina </NACHNAME>
<ABTEILUNG>Einkauf </ABTEILUNG>
<EMAIL>Another.Dudarina@some.url.com</EMAIL>
<TELEFON>+43 17007 32102</TELEFON>
<PREISLISTEN>
<PREISLISTE>Katalog </PREISLISTE>
<PREISLISTE>Y OO </PREISLISTE>
<PREISLISTE>Kopierpapier "A" </PREISLISTE>
<PREISLISTE>Aktion Internet </PREISLISTE>
<PREISLISTE>Tinte Toner "H" </PREISLISTE>
<PREISLISTE>News Internet </PREISLISTE>
</PREISLISTEN>
<SPESEN>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
</SPESEN>
</ANSPRECHPARTNER>
</ANSPRECHPARTNERS>
</KUNDE>
</ROWSET>
我已经尝试了很多小时不同的事情,但我就是不知道如何正确地做到这一点。这就是我的 XSLT 文件的样子:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="rowsByKDNR" match="ROW" use="concat(KUNDENNR, '+', ANSPRECHNR)"></xsl:key>
<xsl:template match="ROWSET">
<ROWSET>
<xsl:for-each-group select="ROW" group-by="KUNDENNR">
<KUNDE>
<xsl:copy-of select="KUNDENNR" />
<ANSPRECHPARTNERS>
<xsl:for-each select="current-group()[count(. | key('rowsByMonth', concat(KUNDENNR, '+', ANSPRECHNR))[1]) = 1]">
<ANSPRECHPARTNER>
<xsl:copy-of select="ANSPRECHNR" />
<xsl:copy-of select="FUNKTION" />
<xsl:copy-of select="VORNAME" />
<xsl:copy-of select="NACHNAME" />
<xsl:copy-of select="ABTEILUNG" />
<xsl:copy-of select="EMAIL" />
<xsl:copy-of select="TELEFON" />
<PREISLISTEN>
<xsl:for-each select="key('rowsByKDNR', concat(KUNDENNR, '+', ANSPRECHNR))">
<xsl:copy-of select="PREISLISTE" />
</xsl:for-each>
</PREISLISTEN>
<SPESEN>
<xsl:for-each select="key('rowsByKDNR', concat(KUNDENNR, '+', ANSPRECHNR))">
<SPESE>
<xsl:value-of select="SPESEN" />
</SPESE>
</xsl:for-each>
</SPESEN>
</ANSPRECHPARTNER>
</xsl:for-each>
</ANSPRECHPARTNERS>
</KUNDE>
</xsl:for-each-group>
</ROWSET>
</xsl:template></xsl:stylesheet>
但这给了我以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<ROWSET>
<KUNDE>
<KUNDENNR>59957</KUNDENNR>
<ANSPRECHPARTNERS>
<ANSPRECHPARTNER>
<ANSPRECHNR>3</ANSPRECHNR>
<FUNKTION>lfd. Kontakt, </FUNKTION>
<VORNAME>Some </VORNAME>
<NACHNAME>Dude </NACHNAME>
<ABTEILUNG>Einkauf </ABTEILUNG>
<EMAIL>Some.Dude@some.url.com</EMAIL>
<TELEFON>123456789</TELEFON>
<PREISLISTEN>
<PREISLISTE>Katalog </PREISLISTE>
<PREISLISTE>Y OO </PREISLISTE>
<PREISLISTE>Kopierpapier "A" </PREISLISTE>
<PREISLISTE>Aktion Internet </PREISLISTE>
<PREISLISTE>Tinte Toner "H" </PREISLISTE>
<PREISLISTE>News Internet </PREISLISTE>
<PREISLISTE>Katalog </PREISLISTE>
<PREISLISTE>Y OO </PREISLISTE>
<PREISLISTE>Kopierpapier "A" </PREISLISTE>
<PREISLISTE>Aktion Internet </PREISLISTE>
<PREISLISTE>Tinte Toner "H" </PREISLISTE>
<PREISLISTE>News Internet </PREISLISTE>
</PREISLISTEN>
<SPESEN>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
</SPESEN>
</ANSPRECHPARTNER>
<ANSPRECHPARTNER>
<ANSPRECHNR>1</ANSPRECHNR>
<FUNKTION>Sachbearbeitung </FUNKTION>
<VORNAME>Another </VORNAME>
<NACHNAME>Dudarina </NACHNAME>
<ABTEILUNG>Einkauf </ABTEILUNG>
<EMAIL>Another.Dudarina@some.url.com</EMAIL>
<TELEFON>+43 17007 32102</TELEFON>
<PREISLISTEN>
<PREISLISTE>Katalog </PREISLISTE>
<PREISLISTE>Y OO </PREISLISTE>
<PREISLISTE>Kopierpapier "A" </PREISLISTE>
<PREISLISTE>Aktion Internet </PREISLISTE>
<PREISLISTE>Tinte Toner "H" </PREISLISTE>
<PREISLISTE>News Internet </PREISLISTE>
<PREISLISTE>Katalog </PREISLISTE>
<PREISLISTE>Y OO </PREISLISTE>
<PREISLISTE>Kopierpapier "A" </PREISLISTE>
<PREISLISTE>Aktion Internet </PREISLISTE>
<PREISLISTE>Tinte Toner "H" </PREISLISTE>
<PREISLISTE>News Internet </PREISLISTE>
</PREISLISTEN>
<SPESEN>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>Sonderbeschaffungskosten </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
<SPESE>MM-Zuschlag55 3.6 </SPESE>
</SPESEN>
</ANSPRECHPARTNER>
</ANSPRECHPARTNERS>
</KUNDE>
</ROWSET>
PREISLISTEN
中的元素SPESEN
出现得太频繁了。我做错了什么,我需要改变什么才能让它发挥作用?
先感谢您