Martin Speiser: Ich will keinen Namespace

Hallo zusammen!

Ich habe ein vertracktes Problem. Ich habe ein XML-Dokument, dass ich mit XSLT bearbeiten will.

Das XML sieht z.B. so aus:

<BMECAT>
  <HEADER>
    <GENERATOR_INFO>XLS-BMEcat Generator</GENERATOR_INFO>
    <CATALOG>
      <LANGUAGE>DEU</LANGUAGE>
      <CATALOG_ID>3M</CATALOG_ID>
      <CATALOG_VERSION>001.001</CATALOG_VERSION>
      <CATALOG_NAME>3M</CATALOG_NAME>
      <DATETIME type="generation_date">
        <DATE>2003-01-23</DATE>
        <TIME>14:06:18</TIME>
      </DATETIME>
      <TERRITORY>DE</TERRITORY>
      <MIME_ROOT>.</MIME_ROOT>
    </CATALOG>
    <BUYER>
      <BUYER_NAME>PUBLIC</BUYER_NAME>
    </BUYER>
    <SUPPLIER>
      <SUPPLIER_ID type="iln">123456789</SUPPLIER_ID>
      <SUPPLIER_NAME>Supplier</SUPPLIER_NAME>
    </SUPPLIER>
  </HEADER>
(usw.)

Soweit so gut, da läuft mein XSLT hervorragend. Jetzt ist aber das Problem, dass da auch eine DTD stehen kann, und in dieser DTD ist das Element BMECAT folgendermaßen definiert:

<!ATTLIST BMECAT
            version  CDATA   #FIXED "1.2"
            xmlns    CDATA   #FIXED 'http://www.bmecat.org/bmecat/1.2/bmecat_new_catalog'>

Okay, hier ist ein default namespace eingetragen. Aber um die Sache vollends konfus zu machen, es gibt 3 leicht unterschiedliche DTDs, und damit drei Namespaces. Ingesamt also 4 Möglichkeiten für Namespaces (es kann auch keiner kommen). Muss ich jetzt wirklich ier verschiedene XSL bauen, nur um immer die gleiche Transformation zu machen? Und wie kann ich erreichen, dass der XSL-Prozessor (in dem Fall Xalan-J 2.4.1) den Namespace nicht am BMECAT-Element anhängt, sondern das Tag so lässt wie es ist?

Ich hoffe, die Frage ist verständlich :-)

Gruß,
Martin

  1. Hallo Martin,

    Okay, hier ist ein default namespace eingetragen. Aber um die Sache vollends konfus zu machen, es gibt 3 leicht unterschiedliche DTDs, und damit drei Namespaces. Ingesamt also 4 Möglichkeiten für Namespaces (es kann auch keiner kommen). Muss ich jetzt wirklich ier verschiedene XSL bauen, nur um immer die gleiche Transformation zu machen?

    Nein.

    Folgende Konstrukte sollten Dir weiter helfen

    <xsl:apply-templates select="*[local-name()='elementname']"/>
    <xsl:template match="*[local-name()='eintrag']">

    Gruß
    Franz

    1. Hi Franz,

      Folgende Konstrukte sollten Dir weiter helfen

      <xsl:apply-templates select="*[local-name()='elementname']"/>
      <xsl:template match="*[local-name()='eintrag']">

      Heissa! Vielen Dank, es funktioniert.

      Gruß,
      Martin