2016-11-08 2 views
0

Quelle xml verwendet werden, enthält benutzerdefinierte Namespaces:Wie XSL-Transformation durchzuführen, wenn benutzerdefinierte Namespaces

<?xml version='1.0' encoding='UTF-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
    <ns:getBuyInvoiceResponse xmlns:ns="http://iws.itella.ee"> 
     <ns:return> 
     <E_Invoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
... 

XSL contaisn auch den Namespaces:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns="http://iws.itella.ee" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 

und sie in der Wahl verwendet werden

<xsl:template match="/soapenv:Envelope/soapenv:Body/ns:getBuyInvoiceResponse/E_Invoice/Invoice/InvoiceItem/InvoiceItemGroup/*"> 

XSLT-Transformation mit http://www.utilities-online.info/xsltransformation erstellt leeres Dokument. Wie behebt man das, damit der Dokumenteninhalt auch erstellt wird?

Antwort

1

Für eine Sache, E_Invoice ist ein Kind von ns:return, nicht ns:getBuyInvoiceResponse - so Ihre zweite Vorlage entspricht nichts.

Beachten Sie auch, dass ein Einstimmungsmuster unterscheidet sich von einem wählen Ausdruck: Sie müssen nicht den vollständigen Pfad buchstabieren. Diese:

<xsl:template match="InvoiceItemGroup/*"> 

hätte genauso gut funktioniert.

Schließlich müssen Sie nur xsl:element verwenden, wenn der Name des Elements berechnet werden muss. Ansonsten ist es kürzer und besser zu verwenden Literal Ergebniselemente.