Lightfly: XSL Namespace Attribut verhindert zugriff auf Kind-Elemente

Beitrag lesen

Hallo

Ich versuche Adressen aus einer Finanzsoftware in den Exchangeserver zu speichern. Die Finanzsoftware bietet mir eine XML Schnittstelle, der Exchange ebenso. Nun versuche ich mittels XSL diese XML Daten in XML WebDav Requests zu Transformieren, scheitere dabei aber an einem Namespace Problem.

So sieht die Ursprungs XML Datei aus der Finanzsoftware aus:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    soapenv:Header[div. irrelevant]</soapenv:Header>
    soapenv:Body
        <IsFinishedResponse xmlns="http://www.abacus.ch/abaconnect/2007.10/adre/HierarchyAddress"
           xmlns:act="http://www.abacus.ch/abaconnect/2007.10/core/AbaConnectTypes"
           xmlns:apt="http://www.abacus.ch/abaconnect/2007.10/adre/HierarchyAddressTypes">

<DataContainer>
             <Data>
               apt:AddressData
                   apt:IsWorXfalse</apt:IsWorX>
                   apt:CityGossau SG</apt:City>
     [usw...]
        </apt:AddressData>
       </Data>
     </DataContainer>

</IsFinishedResponse>
      </soapenv:Body>
   </soapenv:Envelope

MIt diesem simplen XSL lässt sich das Problem bereits nachvollziehen:

<xsl:output indent="yes"/>
 <xsl:output method="xml"/>

<xsl:template match="/">
  <xsl:for-each select="soapenv:Envelope/soapenv:Body/IsFinishedResponse/*">
   <xsl:element name="{name()}"/>
  </xsl:for-each>
  </xsl:template>

-> Dieses XSL gibt nichts mehr aus, obwohl es nach meinem verständnis "<DataContainer/>" ausgeben sollte.

ab dem Node "<IsFinishedResponse" ist nichts mehr ansprechbar, keine Werte, keine Nodes, ich kann ab dieser Node nichts mehr auslesen.

Sobald ich aber das "xmlns" attribut aus dem <IsFinishedResponse> lösche, funktioniert alles wieder. Sprich, die Ausgabe ist wie gewünscht "<DataContainer/>", ich kann dann wieder auf alles unterhalb zugreifen.

Wenn irgendwie möglich, möchte ich aber Quell XML aus der Finanzapplikation unberührt durch den Parser laufen lassen, d.h. ich möchte nicht vorher jede xml datei öffnen und dieses "xmlns" attribut entfernen, bevor es geparst wird. (fals möglich)

Als Parser verwende ich ein aktuelles Saxon.

gruss

lightfly