You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Monday, March 22nd 2010, 10:06am

Aus XML -> HTML -> doppelte Einträge vermeiden

Hi,

ich habe hier ein größeres XML File mit Produkten. Diese Produkte lasse ich mir als HTML erzeugen. Nun sind teilweise Produkte doppelt in der XML (weil die als Zubehör zu mehreren Produkten gehören können).
Jetzt kommt natürlich beim schreiben der HTML Dateien der Fehler, dass die Seite schon vorliegt und mein batch bricht ab:

Quoted

Error at xsl:result-document on line 30 of web_export.xsl:
XTDE1490: Cannot write more than one result document to the same URI:
file:/F:/99_Daten/XML/batch_web/web/290-1AF00%20-%2035%20mm%20Profilschiene.html


Wie kann ich das denn umgehen? Sprich am liebsten wäre mir, wenn vorhandene Dateien einfach ignoriert werden würden.

2

Wednesday, March 24th 2010, 8:05pm

Hi,
schau dir dazu mal diesen Thread an: XSLT Wordcount - doppelte Elementinhalte zählen

Mein Ansatz war damals die Liste zu sortieren und aufs vorhergehende Element zu prüfen:

XML Code

1
2
3
4
<xsl:for-each select="/haus/bereich">
<xsl:sort select="." />
	<xsl:choose>
		<xsl:when test="not(preceding-sibling::bereich = .)">


xml_looser hat jedoch mit key() eine schönere Lösung gepostet.

3

Tuesday, April 27th 2010, 5:26pm

So da bin ich wieder.
Ich sortiere in meinem Fall nicht nach dem Knoten, sondern nach einem im Knoten enthaltenen Attribut:

XML Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<xsl:for-each select="//PRO">
           <xsl:sort select="PRAT[@name='ARTIKELNUMMER']/VALUE/text()" data-type="text" order="ascending"/>
                 <TR minheight="1,5" grow="1">
                   <TD style="Preisliste:Preisliste_Zelle" alignment="0" rundisttop="1" rundistbottom="1" rundistleft="1" rundistright="1" strokewidth="0,5" strokecolor="Black" strokevalue="100">
                     <xsl:value-of select="PRAT[@name='ARTIKELNUMMER']/VALUE/text()"/>
                   </TD>
                   <TD style="Preisliste:Preisliste_Zelle" alignment="0" rundisttop="1" rundistbottom="1" rundistleft="1" rundistright="1" strokewidth="0,5" strokecolor="Black" strokevalue="100">
                     <xsl:choose>
                       <xsl:when test="PRAT[@name='IPRO_BESCHREIBUNG']/VALUE/text() != ''"><ABSATZ style="Preisliste:Preisliste_Zelle_Bold"><xsl:value-of select="PRAT[@name='IPRO_BESCHREIBUNG']/VALUE/text()"/></ABSATZ></xsl:when>
                       <xsl:otherwise><ABSATZ style="Preisliste:Preisliste_Zelle_Bold"><xsl:value-of select="PRAT[@name='PRODUKTNAME']/VALUE/text()"/></ABSATZ></xsl:otherwise>
                     </xsl:choose>
                   </TD>
                   <TD style="Preisliste:Preisliste_Zelle_rb" alignment="0" rundisttop="1" rundistbottom="1" rundistleft="1" rundistright="1" strokewidth="0,5" strokecolor="Black" strokevalue="100">
                     <xsl:if test="normalize-space(PRAT[@name='RABATTIERFAEHIG']/VALUE/text()) = '0'">
                       <RABATT/><BLANK/>             
                     </xsl:if>
                     <xsl:if test="string-length(PRAT[@name='PREIS_NETTO']/VALUE/text())">
                       <xsl:value-of select="format-number(PRAT[@name='PREIS_NETTO']/VALUE/text(), $formatString, $formatName)"/>
                     </xsl:if>
                   </TD>
                 </TR>
          </xsl:for-each>


Nur wie vermeide ich da jetzt doppelte Einträge? Weil in Eueren Beispielen sortiert Ihr ja direkt am Knoten (wenn ich mich nicht irre).

4

Tuesday, April 27th 2010, 5:46pm

Also gut, ich habe das ganze nun mit for-each-group versucht:

XML Code

1
<xsl:for-each-group select="//PRO" group-by="PRAT[@name='ARTIKELNUMMER']/VALUE/text()">


Damit scheint es zu klappen. Musste ich halt auf XSL 2.0 umsteigen. Mal sehen, ob ich damit nich zu viel "lösche". ;)

5

Tuesday, April 27th 2010, 6:52pm

melde dich mal icq 567877710
Helmut Hagemann

Similar threads

Social bookmarks