AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML.Attributes entfernen

Ein Thema von Dunkel · begonnen am 3. Jul 2007 · letzter Beitrag vom 3. Jul 2007
Antwort Antwort
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#1

XML.Attributes entfernen

  Alt 3. Jul 2007, 18:51
Hallo zusammen!

Seit kurzer Zeit beschäftige ich mich mit XML. Um genauer zu sein, versuche ich momentan das XSPF-Playlist-Format zu lesen & zu schreiben.

Das Lesen ist (nach einer seehhrr langen Nacht) nicht das Problem, das Schreiben im Prinzip auch nicht.

Hier ist der Test-Quelltext zum Schreiben eines XSPF-Dokuments:
Delphi-Quellcode:
var
  myXML: IXMLDocument;
  node: IXMLNode;
  i: word;
begin
  myXML := newXMLDocument;
  myXML.Options:= [doNodeAutoIndent];

  myXML.Encoding:= 'UTF-8';

  node:= myXML.AddChild('playlist');
  node.Attributes['version']:= '0';
  node.Attributes['xmlns']:= 'http://xspf.org/ns/0/';

  node:= myXML.DocumentElement.AddChild('trackList');

  for i := 1 to 5 do
    begin
      node:= myXML.DocumentElement.ChildNodes.FindNode('trackList').AddChild('track');
      node.AddChild('creator');
      node.ChildNodes.FindNode('creator').Text:= 'TestArtist'+IntToStr(i);
      node.AddChild('location');
      node.ChildNodes.FindNode('location').Text:= 'TestLocation'+IntToStr(i);
      node.AddChild('trackNum');
      node.ChildNodes.FindNode('trackNum').Text:= IntToStr(i);
    end;

  myXML.Active:= True;
  myXML.SaveToFile('D:\Test.xspf');
end;

Und so sieht die erzeugte Datei aus:
XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="0" xmlns="http://xspf.org/ns/0/">
  <trackList xmlns="">
    <track>
      <creator>TestArtist1</creator>
      <location>TestLocation1</location>
      <trackNum>1</trackNum>
    </track>
    <track>
      <creator>TestArtist2</creator>
      <location>TestLocation2</location>
      <trackNum>2</trackNum>
    </track>
    <track>
      <creator>TestArtist3</creator>
      <location>TestLocation3</location>
      <trackNum>3</trackNum>
    </track>
    <track>
      <creator>TestArtist4</creator>
      <location>TestLocation4</location>
      <trackNum>4</trackNum>
    </track>
    <track>
      <creator>TestArtist5</creator>
      <location>TestLocation5</location>
      <trackNum>5</trackNum>
    </track>
  </trackList>
</playlist>
So weit, so gut. Das Problem ist nur, dass im Node trackList das Attribut xmlns gesetzt wird. Ich bin mir aber nicht bewusst, wo ich das in meinem Code mache.

Kann mir da jemand weiterhelfen?
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: XML.Attributes entfernen

  Alt 3. Jul 2007, 19:15
Hallo,

dein Problem scheint mir hier schon einmal behandelt worden zu sein: Attribute die ich gar nicht explizit erstellt habe

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: XML.Attributes entfernen

  Alt 3. Jul 2007, 21:22
Besten Dank für den Link, marabu!

Da ich aber nicht mit dem MS-DOM arbeite, hat mich das alles aber nicht wirklich weitergebracht. AppendChild & Co kennt IXMLDocument leider nicht; zumindest habe ich auf die Schnelle keine Entsprechende Funktion gefunden.

Mein Quick&Dirty-Workaround sieht momentan wie folgt aus:
Delphi-Quellcode:
  //myXML.SaveToFile('D:\Test.xspf');
  myXML.XML[2]:= StringReplace(myXML.XML[2], ' xmlns=""', '', [rfReplaceAll]);
  myXML.XML.SaveToFile('D:\Test.xspf');
Ist definitiv nicht schön, bringt mir aber das gewünschte Ergebnis.

Ich werde aber noch weiter probieren, irgendwie muss es ja auch mit IXMLDocument gehen.

Deswegen lasse ich dieses Thema weiterhin offen; und hoffe auf eine Erleuchtung oder auf mehr Postings.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: XML.Attributes entfernen

  Alt 3. Jul 2007, 21:47
Hallo,

Zitat von Dunkel:
... Da ich aber nicht mit dem MS-DOM arbeite, hat mich das alles aber nicht wirklich weitergebracht. ...
da du keine Angabe zum DOM-Vendor gemacht hattest, habe ich den Default unterstellt - und der ist MSXML.

Meine Erklärungen aus dem verlinkten Beitrag lassen sich übrigens so auf deine Umgebung übertragen:

Delphi-Quellcode:
const
  nsDefault = 'http://xspf.org/ns/0/';
var
  myXML: IXMLDocument;
  node: IXMLNode;
  i: word;
begin
  myXML := newXMLDocument;
  myXML.Options:= [doNodeAutoIndent];

  myXML.Encoding:= 'UTF-8';

  node:= myXML.AddChild('playlist');
  node.Attributes['version']:= '0';
  node.Attributes['xmlns']:= nsDefault;

  node:= myXML.DocumentElement.AddChild('trackList', nsDefault);

  // ...
Gute Nacht
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: XML.Attributes entfernen

  Alt 3. Jul 2007, 23:33
marabu, you made my day!
Funktioniert perfekt! DANKE!
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz