Ankündigung

Einklappen
Keine Ankündigung bisher.

XMLReader - Umgang mit namespaces in tags

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XMLReader - Umgang mit namespaces in tags

    Hallo zusammen,

    bei dem Versuch mittels XMLReader eine XML Datei von einer externen Quelle zu parsen bin ich bei folgendem Problem gelandet:

    Die XML Dateien sind in etwa so aufgebaut, es wird also für das root Element ein Namensraum definiert, zusätzlich noch ein zweiter mit prefix. Jetzt gibt es aber noch später in den Tags Metadata jeweils eine weitere namespace Angabe mittels dem xmlns Attribut, welches ja laut Definition dann für dieses tag und alle sub-tags gilt.:

    Code:
    <?xml version="1.0" encoding="utf-8" ?>
    <GAEB xmlns="http://www.gaeb.de/GAEB_DA_XML/200407" xmlns:test="test">
    	<GAEBInfo>
    		<Version>3.1</Version>
    		<VersDate>2009-12</VersDate>
    		<Date>2014-11-01</Date>
    	</GAEBInfo>
    	...
    	<Metadata xmlns="test">
    		<ID>12584592</ID>
    	</Metadata>
    	...
    </GAEB>
    Und ja, die Angabe in den tags ist wirklich keine URI sondern nur der String "test". Sollte laut http://de.wikipedia.org/wiki/Namensraum_%28XML%29 aber trotzdem ok sein. Hier wirft mir jedoch der XMLReader folgenden Fehler:
    Code:
    XMLReader::read(): file:///C:/xampp/htdocs/:2: namespace warning : xmlns: URI test is not absolute
    Leider finde ich hierzu weder etwas im manual zur Funktion, noch finde ich hier etwas Schlaues im Internet. Was ist der Fehler?

    Im Momnet behelfe ich mir damit, dass ich vor dem Parsen der Datei alle diese tags per regex rauslösche, aber das kann ja nicht die optimale Lösung sein. Irgendwelche Ideen, warum hier ein Fehler geworfen wird?

    Vielen Dank im Voraus!

    Gruß Talwin
    There are 10 kind of people: those who understand binary and those who don't.


  • #2
    (..) Sollte laut http://de.wikipedia.org/wiki/Namensraum_%28XML%29 aber trotzdem ok sein. Hier wirft mir jedoch der XMLReader folgenden Fehler
    finde weder in dem wikipedia artikel noch in:
    http://www.w3.org/TR/xml-names11/ einen anhaltspunkt für die aussage, kannste zitieren?

    Kommentar


    • #3
      Zitat von moma Beitrag anzeigen
      finde weder in dem wikipedia artikel noch in:
      http://www.w3.org/TR/xml-names11/ einen anhaltspunkt für die aussage, kannste zitieren?
      Hmm, ich dachte ich hätte das gelesen. Aber anscheinend muss ein Namensraum als URI bzw. IRI definiert sein. Also müsste ja schon diese Deklaration hier falsch sein?
      Code:
      xmlns:test="test"
      und dann erst recht auch das?
      Code:
      xmlns="test"
      Komischerweise klappt aber jedoch diese Variante ohne Fehlermeldung. Warum?
      Code:
      <?xml version="1.0" encoding="utf-8" ?>
      <GAEB xmlns="http://www.gaeb.de/GAEB_DA_XML/200407" xmlns:test="test">
      	<GAEBInfo>
      		<Version>3.1</Version>
      		<VersDate>2009-12</VersDate>
      		<Date>2014-11-01</Date>
      	</GAEBInfo>
      	...
      	<test:Metadata>
      		<ID>12584592</ID>
      	</test:Metadata>
      	...
      </GAEB>
      There are 10 kind of people: those who understand binary and those who don't.

      Kommentar


      • #4
        jo,
        http://www.validome.org/ beide nicht valide
        http://www.xmlvalidation.com/ beide valide
        kommisch gelle. aber das ganze ist ja soweiso nur pseudocode nehm ich mal an.

        Kommentar


        • #5
          xmlns:test definiert den namespace für test, dort ist nur eine URI/URL/IRI valide und die haben specifische Schemata auf die bei der jeweiligen XML 1.0 Implementierung validiert wird ( oder nicht ).

          XML Namesräume müssen nicht existent sein, sie sollen lediglich hinweisen wer sie entworfen / implementiert hat.

          HTML-Code:
          <foo xmlns:foo="http://ns.example.org/foo"></foo>
          Idealer Weise kann man über diese URLs eine Doku liefern.
          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

          Kommentar


          • #6
            Zitat von moma Beitrag anzeigen
            jo,
            http://www.validome.org/ beide nicht valide
            http://www.xmlvalidation.com/ beide valide
            kommisch gelle. aber das ganze ist ja soweiso nur pseudocode nehm ich mal an.
            ja, "test" ist die Ersetzung für den Firmennamen, woher die Datei stammt. Es ist auch ein normaler String. Leider bekommen wir die Dateien so von denen, bzw. unsere Kunden, die solche XML Dateien in unser System importieren möchten.

            Daher müssen wir leider eine Lösung für solche falschen Namespace-Angaben finden.

            Zitat von tr0y Beitrag anzeigen
            xmlns:test definiert den namespace für test, dort ist nur eine URI/URL/IRI valide und die haben specifische Schemata auf die bei der jeweiligen XML 1.0 Implementierung validiert wird ( oder nicht ).

            XML Namesräume müssen nicht existent sein, sie sollen lediglich hinweisen wer sie entworfen / implementiert hat.
            OK, habe ich verstanden. Also wird mir nichts anderes übrigbleiben als solche Tags entweder rauszuschmeißen, oder aus dem Namespace "test" eine valide URI/IRI zu formen.
            Code:
            <Metadata xmlns="test">
            	<ID>12584592</ID>
            </Metadata>
            There are 10 kind of people: those who understand binary and those who don't.

            Kommentar

            Lädt...
            X