xml attribute

theplake

Erfahrenes Mitglied
Hi Leute

Ich hab mir ein Xml erstellt mit attributen.Nur schreibt er das alles in eine Zeile.Wie kann ich das ändern? \n nimmt er nich.
 
Hallo,

bißchen dürftig, deine Angaben. So kann dir keiner helfen.

Wie sieht deine XML aus?
Wer schreibt alles in eine Zeile?
Womit hast du die XML erstellt?

Mfg

langer
 
Oh sry wollte eigentlich den Code zeigen.

Hier

Code:
if(saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
	{

	
	XmlDocument ^doc = gcnew XmlDocument();
        
		XmlElement ^body = doc->CreateElement("cfg");
		
		doc->AppendChild( body );
		
		XmlAttribute^ attr;
		attr = doc->CreateAttribute("genre");
                attr->Value = this->tabPage1->Text;
	        doc->DocumentElement->SetAttributeNode( attr );
   	 
		
		doc->Save(saveFileDialog1->FileName);
	}

So das problem ist das der alles in eine Zeile schreibt.
 
Hallo,
mit welchem Parser zeigst du die Datei denn an? Kannst du mal eine Beispiel-XML posten, so wie sie gespeichert wurde?

Mfg

langer
 
Klar kann ich machen. Ich habe System::Xml benutzt.

In dieser Xml steht es so wie der Code es schreibt.
 

Anhänge

  • dffd.zip
    130 Bytes · Aufrufe: 13
Hallo,
bei mir steht nur

<cfg genre="" />

in der Datei. Dann kann auch nur eine Zeile da sein. Was zeigt sich denn bei dir?

Mfg

langer
 
Hi.

Probier's mal so:
C++:
doc->PreserveWhitespace = false;
Das führt dazu, dass die Leerzeichen wie sie im Dokument sind, nachdem du es zusammengebaut hast, bei der Ausgabe nicht so bleiben, sondern entsprechend eingerückt und auf unterschiedliche Zeilen verteilt wird.

Evtl. solltest du lieber einen XmlTextWriter verwenden, wenn du lediglich ein XML Dokument genieren willst. (siehe z.B. http://www.codeguru.com/Csharp/Csharp/cs_data/xml/article.php/c4227/)

Gruß
 
Ich hab das jetzt so:

Nur wie kann ich jetzt die einzelnen Values der Attribute auslesen?

Code:
	XmlTextWriter ^writer = gcnew XmlTextWriter (saveFileDialog1->FileName, System::Text::Encoding::Unicode);

     //Use automatic indentation for readability.
 //     writer->Formatting = Formatting->Indented;

     //Write the root element
     writer->WriteStartElement("CFG");

     //Start an element
     writer->WriteStartElement("TabPage");
	
	 
     //Add an attribute to the previously created element
	 String ^balue = this->tabPage1->Name;
     String ^balue2 = this->tabPage1->Text;


	 writer->WriteAttributeString("TabPageName", balue);
	 writer->WriteEndElement();
	 writer->WriteStartElement("TabPage");
	 writer->WriteAttributeString("TabPageText", balue2);

	 //add sub-elements
    // writer->WriteElementString("title", "The Matrix");
     //writer->WriteElementString("format", "DVD");

     //End the item element
     writer->WriteEndElement();  // end item

      //Write some white space between nodes
     writer->WriteWhitespace("\n");


      // end the root element
     writer->WriteFullEndElement();

     //Write the XML to file and close the writer
	 writer->Close();
  }
 
Hi.

Wie bereits gesagt ist es aber etwas unsinnig einen XmlTextWriter zu nehmen wenn du die Datei nicht nur erzeugen, sondern auch weiterverarbeiten willst.

Zum einen könntest du die gespeicherte Datei wiederum mit einem XmlTextReader verarbeiten (siehe http://www.devtrain.de/artikel_768.aspx) oder du lädst die Datei in ein XmlDocument.

Auf die Attribute könntest du dann mit einem XPath Ausdruck zugreifen, oder über alle Knoten des Dokuments itererieren. Oder du könntest ein DataSet verwenden wenn du das Xml Dokument wie eine Datenbank abfragen willst.

Allerdings ist das alles eher etwas für das .NET Forum.

Gruß
 
Zurück