juls_pro_37: XSLT 1.0 Leerzeichen/Zeilenumbruch entfernen

Hi,

wie kann ich das Leerzeichen bzw. Zeilenumbruch von nur einem bestimmten Node entfernen?

Mein Ansatz wäre:

  <xsl:template match="SupplierAddressInformation_001/Street[contains(., ' ')]">
    <Street><xsl:value-of select="substring-before(., ' ')"/> and <xsl:value-of select="substring-after(., ' ')"/></Street>
  </xsl:template>

  <xsl:template match="SupplierAddressInformation_001/Street[contains(., '&#10;')]">
    <Street><xsl:value-of select="substring-before(., '&#10;')"/> and <xsl:value-of select="substring-after(., '&#10;')"/></Street>
  </xsl:template>

Beispiel:

    <ShipFromAddressInformation>
      <Street>Test
Straße 8-9</Street>
    </ShipFromAddressInformation>

LG Julian

  1. Hallo Julian,

    wie kann ich das Leerzeichen bzw. Zeilenumbruch von nur einem bestimmten Node entfernen?

    Mein Ansatz wäre:

      <xsl:template match="SupplierAddressInformation_001/Street[contains(., ' ')]">
        <Street><xsl:value-of select="substring-before(., ' ')"/> and <xsl:value-of select="substring-after(., ' ')"/></Street>
      </xsl:template>
    
    

    Passt nicht auf das genannte Element ShipFromAddressInformation (oder es soll die Ausgabe sein), and ist hier als logischer Operator nicht zielführend. Entweder mit normalize-space() oder concat() arbeiten. Ersteres setzt Leerzeichen statt Zeilenumbruch, letzteres zunächst kein Leerzeichen, was sich aber auch noch ergänzen ließe.

    <xsl:template match="ShipFromAddressInformation/Street[contains(., '&#10;')]">
      <Street><xsl:value-of select="normalize-space(.)"/></Street>
      <!-- <Street>Test Straße 8-9</Street> -->
    </xsl:template>
    
    <xsl:template match="ShipFromAddressInformation/Street[contains(., '&#10;')]">
      <Street><xsl:value-of select="concat(substring-before(., '&#10;'), substring-after(., '&#10;'))"/></Street>
      <!-- <Street>TestStraße 8-9</Street>, ggf. ' ' als zweiten String setzen -->
    </xsl:template>
    

    Grüße,
    Thomas

    1. vielen vielen danke!!!!! hat natürlich wunderbar geklappt! 😀

  2. Hi,

    wie kann ich das Leerzeichen bzw. Zeilenumbruch von nur einem bestimmten Node entfernen?

      <xsl:template match="SupplierAddressInformation_001/Street[contains(., ' ')]">
    

    Leerzeichen aus Straßennamen zu entfernen ist m.E. ein Fehler.

    "Berliner Str." ist korrekt, wenn sich der Name auf die Stadt bezieht.
    "Berlinerstr." ist korrekt, wenn's vom Krapfen oder einer Person namens "Berliner" stammt.

      <xsl:template match="SupplierAddressInformation_001/Street[contains(., '&#10;')]">
        <Street><xsl:value-of select="substring-before(., '&#10;')"/> and <xsl:value-of select="substring-after(., '&#10;')"/></Street>
      </xsl:template>
    

    Zeilenumbrüche können auch aus &#13;&#10; bestehen.

    cu,
    Andreas a/k/a MudGuard

    1. Hallo MudGuard,

      "Berliner Str." ist korrekt, wenn sich der Name auf die Stadt bezieht.

      Nö, "Berlinstraße" ist durchaus richtig, egal ob das von der Stadt Berlin oder von Irving B. herkommt. Es muss eine Ableitung eines Orts- oder Ländernamens auf -er sein. Wobei mir "Frankreicher Straße" merkwürdig vorkäme 😉

      Es ist übrigens ein Germanismus, die Schweizer sehen das ganz anders. Und nicht nur in der Rue de Konstanz, sondern auch in der Konstanzerstrasse in Kreuzlingen.

      Rolf

      --
      sumpsi - posui - obstruxi
      1. Hi,

        "Berliner Str." ist korrekt, wenn sich der Name auf die Stadt bezieht.

        Nö, "Berlinstraße" ist durchaus richtig,

        Ich hab nix gegenteiliges gesagt.

        cu,
        Andreas a/k/a MudGuard