Announcement

Collapse
No announcement yet.

Problem Dokument-Elemente über ihren Namespace anzusprechen

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

  • Problem Dokument-Elemente über ihren Namespace anzusprechen

    Hi Community!

    Ich habe ein Problem im XSLT Stylesheet die Elemente aus dem zu transformierenden XML-Dokument über ihren Namespace anzusprechen.
    <br>
    Folgende Dateien gehören zu dem Problem:
    <br>
    <b>1.) Definition des XML-Dokument Schema sieht folgendermassen aus (Auszug):</b>
    <br>
    <?xml version="1.0" encoding="utf-8"?>
    <schema targetNamespace="http://www.xmlspy.com/schemas/orgchart"
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:xyz="http://www.xmlspy.com/schemas/orgchart" Version="6.3.0">
    <element name="commodity"
    default=""
    minOccurs="1"
    maxOccurs="1"
    ns="p2p"
    xmlns2p="http://www.portal.p2p.com">
    <complexType>
    <sequence>
    <element name="administrative_information"
    default=""
    minOccurs="1"
    maxOccurs="1"
    ns="p2p">
    <complexType>
    <sequence>
    <element name="creation_date"
    default=""
    minOccurs="1"
    maxOccurs="1"
    type="date"
    ns="p2p"/>
    ...
    <br>
    Soweit ich das verstehe, ist jedes Element dem namespace "p2p" zugerodnet, und das ist genau das was ich will bzw. brauche.
    <br>
    <b>2) Das XML-Dokument, dessen Inhalt mit XSLT als HTML dargestellt werden soll, sieht z.B. wie folgt aus (Auszug):</b>
    <br>
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="show_card.xsl"?>

    <commodity xmlns:xf="http://www.sapportals.com/wcm/app/xmlforms"
    xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="/etc/xmlforms/P2PCategoryCard_TEST/P2PCategoryCard_TEST-Schema.xml">

    <administrative_information>
    <creation_date>2005-07-04</creation_date>
    ...
    <br>
    <b>3.) Das XSLT Stylesheet sieht wie folgt aus:</b>
    <br>
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns2p="http://www.portal.p2p.com">

    <xslutput method="html"/>

    <xsl:template match="p2p:commodity">

    &lt;html&gt;
    &lt;body&gt;
    &lt;h2>XSLT Test&lt;/h2&gt;
    Creation Date: <xsl:value-of select="p2p:administrative_information/p2p:creation_date"/>
    &lt;/body&gt;
    &lt;/html&gt;

    </xsl:template>
    </xsl:stylesheet>
    <br>
    Und genau hier fängt das Problem an, denn wenn ich versuche im Stylesheet die Dokument-Elemente über ihr im Schema definiertes Namespace anzusprechen z.B.:
    <br>
    <xsl:template match="p2p:commodity">
    <br>
    funktioiert es nicht, lässt man jedoch das namespace weg z.B:
    <br>
    <xsl:template match="commodity">
    <br>
    funktioniert die Transformation wie gewünscht.
    <br>
    Alle Dateien ausser dem XSLT Stylesheet werden von einem speziellen Tool automatisch generiert, ich kann deshalb auf die Struktur und den Inhalt dieser Dateien keinen Einfluß nehmen. Das Stylesheet ist die einziege Datei, die ich beliebig verändern kann. Aus bestimmten Gründen will/muss ich im Stylesheet die Elemente über ihr Namspace ansprechen, aber genau das geliengt mir nicht.
    <br>
    Jede Hilfe ist Willkommen!
    <br>
    Beste Grüße,
    <br>
    Adam Kreuschner

  • #2
    Hallo Adam,

    So wie ich das sehe, sind die Elemente aus dem XML-Dokument keinen Namensraum bzw. damit dem leeren Namensraum (xmlns="") zugeordnet:

    <commodity xmlns:xf="http://www.sapportals.com/wcm/app/xmlforms"
    xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="/etc/xmlforms/P2PCategoryCard_TEST/P2PCategoryCard_TEST-Schema.xml">

    commodity besitzt kein Präfix, daher gehört es zum Standardnamensraum. Da der Standardnamensraum jedoch nicht explizit gesetzt wurde (xmlns="http://...") ist er gleich dem leeren Namensraum. Selbiges gilt dann auch für das XSLT-Stylesheet, sprich xmlns="" und somit

    <xsl:template match="commodity">

    Fazit: Anders kann es nicht gehen.

    Deine Annahme, dass die Elemente bzw. speziell das Element commodity dem Namensraum http://www.portal.p2p.com zugeordnet ist, trifft nicht zu (keine Ahnung, was dieses ns-Attribut bedeutet. Es ist kein Bestandteil von XML Schema). Vielmehr gehört commodity zum Zielnamensraum (targetNamespace) des XML Schemas: http://www.xmlspy.com/schemas/orgchart. Allerdings ist der im XML-Dokument nicht deklariert. Also hier scheint irgendwas durcheinander zu sein.

    Viele Grüße

    Martin
    www.aboutxml.d
    Martin Szugat
    www.aboutxml.de

    Comment

    Working...
    X