Announcement

Collapse
No announcement yet.

Fallunterscheidung für Namespaces

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

  • Fallunterscheidung für Namespaces

    Hallo zusammen!

    Ich habe folgendes Problem und würde mich freuen, wenn ihr ein paar Tips für mich hättet.

    Ich möchte ein Autosarfile mittels XSLT in ein anderes Format überführen.
    Nun habe ich das Problem, dass die Input-Autosar-Files entweder Version 2.1.2 oder 2.1.4 haben.

    D.h. ich habe das Problem die entsprechende Version abzufangen und daraufhin in meinem XSLT den Namespace anzupassen.
    Gibt es dafür eine recht einfache Möglichkeit, auf die ich jetzt nur nicht komme oder muss ich beispielsweise 2 verschiedene XSLTs, für jede Version eines, schreiben?

    Lieben Dank schonmal,
    Maria.
    Liebe Grüße,
    Maria.

  • #2
    Beschreibe das Problem mit etwas Code, speziell wie diese "Autosar"-Dokumente aussehen und welches Ergebnis erzielt werden soll.

    Comment


    • #3
      Hallo Thomas,
      natürlich, bitte entschuldige.

      Der interessante Teil meiner ARXML Datei ist wahrscheinlich dieser:
      Code:
      <?xml version="1.0" encoding="UTF-8"?>
      <AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/2.1.4 autosar.xsd" xmlns="http://autosar.org/2.1.4" >
      <root>
      Root ist hier einfach der Platzhalter für die Wurzel.

      Der Zuordnung in meiner XSLT-Datei sieht dann so aus:
      Code:
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:AR="http://autosar.org/2.1.4" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="AR xs xsi">
      Das Problem ist hierbei dass der Namespace in der Quell-ARXML-Datei entweder so 'http://autosar.org/2.1.2' oder so 'http://autosar.org/2.1.4' aussieht. Wie kann ich also die unterschiedliche Versionsnummer in meinem XSLT abfangen?
      Liebe Grüße,
      Maria.

      Comment


      • #4
        In diesem Fall hilft die namespace-Achse, ein Beispiel:

        test1.xml:
        Code:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        <root xmlns:abc="http://www.example.net/abc1">
          <abc:test>Inhalt 1</abc:test>
        </root>
        test2.xml:
        Code:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        <root xmlns:abc="http://www.example.net/abc2">
          <abc:test>Inhalt 2</abc:test>
        </root>
        test.xsl:
        Code:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
          <xsl:template match="root">
          
          <xsl:variable name="ns1" select="'http://www.example.net/abc1'"/>
          <xsl:variable name="ns2" select="'http://www.example.net/abc2'"/>
          
          <output>
            <xsl:for-each select="*[namespace::*[.=$ns1] | namespace::*[.=$ns2]]">
              <p><xsl:value-of select="."/></p>
            </xsl:for-each>
          </output>  
        
          </xsl:template>
        
        </xsl:stylesheet>
        Ausgegeben wird je nach XML-Dokument entweder Inhalt 1 bzw. Inhalt 2. Es könnte allerdings praktisch einfacher sein, zunächst alle XML-Dokumente auf einen Namensraum festzulegen oder verschiedene Stylesheets vorzuhalten.

        Comment


        • #5
          Hallo Thomas,

          vielen lieben Dank für Deine Antwort!
          Ich werde es ausprobieren, Du hast mir damit schon mal sehr geholfen.
          Das mit dem Anpassen des Namensraums in den XML-Files bzw.den verschiedenen Style Sheets dachte ich mir schon.
          1. wäre denke ich vom Aufwand her nicht wirklich vertretbar, da es quasi eine Stapelverarbeitung ist und es zu viele Änderungen von Hand wären.
          Ich werde probieren, was am besten läuft.

          Danke nochmal und ein schönes Wochenende!

          Liebe Grüße,
          Maria.
          Liebe Grüße,
          Maria.

          Comment

          Working...
          X