Announcement

Collapse
No announcement yet.

HTML zu XML - Abbruch bei linebreaks

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • HTML zu XML - Abbruch bei linebreaks

    Hallo und Guten Morgen,

    ich habe ein Problem mit dem Wandeln von HTML in XML. Scheinbar wird die node immer an vorhandenen line-breaks im HTML abgebrochen.

    Ich habe folgendes Ausgangs-HTML:

    HTML Code:
    <root>
        <p class="Normal">
            <span class="$ID/[No character style]">Text1
                <br/>
                <br/>
                <br/>
                <br/>
                <br/>Text2 
                <br/>
                <br/>Text3 
                <br/>
                <br/>Text4 
                <br/>
                <br/>Text5 
                <br/>
                <br/>Text6
            </span>
        </p>
    </root>
    Ich habe folgendes XSL zur Umwandlung:

    HTML Code:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
        <xsl:template match="/">
            <xsl:apply-templates/>
        </xsl:template>
        <xsl:template match="//root">
            <xsl:for-each select="//p">
                <ParagraphStyleRange>
                    <xsl:attribute name="AppliedParagraphStyle">
                        <xsl:text>ParagraphStyle/</xsl:text>
                        <xsl:value-of select="@class"/>
                    </xsl:attribute>
                    <xsl:for-each select="span">
                        <CharacterStyleRange>
                            <xsl:attribute name="AppliedCharacterStyle">
                                <xsl:text>CharacterStyle/</xsl:text>
                                <xsl:value-of select="@class"/>
                            </xsl:attribute>
                            <Content>
                                <xsl:value-of select="node()"/>
                            </Content>
                            <xsl:for-each select="br">
                                <Br/>
                            </xsl:for-each>
                        </CharacterStyleRange>
                    </xsl:for-each>
                </ParagraphStyleRange>
            </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>
    heraus kommt leider immer das:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Normal">
       <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
          <Content>Text1
                </Content>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
          <Br/>
                </CharacterStyleRange>
    </ParagraphStyleRange>
    während ich folgendes erwarte:

    HTML Code:
    <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Normal">
    			<CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
    				<Content>Text1</Content>
    				<Br/>
    				<Br/>
    				<Br/>
    				<Br/>
    				<Br/>
    				<Content>Text2</Content>
    				<Br/>
    				<Br/>
    				<Content>Text3</Content>
    				<Br/>
    				<Br/>
    				<Content>Text4</Content>
    				<Br/>
    				<Br/>
    				<Content>Text5</Content>
    				<Br/>
    				<Br/>
    				<Content>Text6</Content>
    			</CharacterStyleRange>
    		</ParagraphStyleRange>
    Ich wäre für Hilfe sehr dankbar. Ich habe schon Tests mit anderen Varianten des XSL gemacht, aber dieses Ergebnis war immer noch das, was am nächsten dran kommt.

    Danke und Gruss
    Dom

  • #2
    Mit verschachtelten for-each wirst du mit XSLT nicht weit kommen, benutze Templates und apply-templates, wenn du Transformationen von Knoten vornehmen willst:
    Code:
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>
    
    <xsl:template match="p">
      <ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle{@class}">
        <xsl:apply-templates/>
      </ParagraphStyleRange>
    </xsl:template>
    
    <xsl:template match="span">
      <CharacterStyleRange AppliedCharacterStyle="CharacterStyle{@class}">
        <xsl:apply-templates/>
      </CharacterStyleRange>
    </xsl:template>
    
    <xsl:template match="br">
      <Br/>
    </xsl:template>
    
    <xsl:template match="p//text()[normalize-space()]">
      <Content>
        <xsl:value-of select="normalize-space()"/>
      </Content>
    </xsl:template>
    
    </xsl:stylesheet>

    Comment


    • #3
      Hallo,

      ist zwar schon ein bisschen her, aber vielen Dank für die Hilfe. Das war ein Volltreffer...

      Gruss
      Dom

      Comment

      Working...
      X