Autor Beitrag
PachN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 14.02.11 22:53 
Hallo, ich bins nochmal :)

Ich hatte hier schonmal um Hilfe gebeten und mir wurde auch super toll geholfen.
www.c-sharp-forum.de...+aendern_104078.html

Allerdings habe ich jetzt ein, sagen wir mal ganz spezielles Problem und ich habe nicht die leiseste Ahnung wie ich das weg bekomme.

XML Datei bearbeiten geht wie gesagt hervorragend.

Ausgangs XML sieht folgendermaßen aus:

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<Database Version="702">
-<FilterFolder />
-<FilterFolder />
-<FilterFolder />
-<FavoriteFolder />
-<FavoriteFolder/>
-<Song FilePath="C:\xxxxxxxxxxxxxxxx" FileSize="14705179">
--<Display Author="" Title="" Genre="" Year="" Color="" Cover="" Tag="" />
-</Song>
</Database>




Die - hab ich mit Absicht gemacht, sie sollen "Blanks" darstellen sodass man es besser erkennt.
Jetzt kommts nämlich :)

Die bearbeitet XML sieht dann jedoch so aus, obwohl ich, denk ich, nur den Value in "FilePath" ändere.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<Database Version="702">
--<FilterFolder />
--<FilterFolder />
--<FilterFolder />
--<FavoriteFolder />
--<FavoriteFolder/>
--<Song FilePath="C:\xxxxxxxxxxxxxxxx" FileSize="14705179">
----<Display Author="" Title="" Genre="" Year="" Color="" Cover="" Tag="" />
--</Song>
</Database>



Und hier liegt der Fehler :(
Mein Drittprogramm, welches die XML verwendet meldet, dass die XML beschädigt sei und schuld daran sind die dazu gekommenen Blanks.
Wieso macht es hier Blanks dazu?
Wie bekomm ich die weg?


Hier noch zur Vervollständigung der Quellcode, welcher die XML ändert:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
XDocument xmlDoc;
xmlDoc = XDocument.Load(filePath);

//some code

foreach (XElement song in xmlDoc.Descendants("Song"))
 {
    XAttribute filePathAttribute = song.Attribute("FilePath");
    if (filePathAttribute.Value == title)
     {
        string value = results[0];
        filePathAttribute.Value = value;        
        break;
     }
 }

xmlDoc.Save(filePath);



Mach ich irgendwas falsch, dass die Blanks da rein kommen??


MfG PachN
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 15.02.11 01:25 
user profile iconPachN hat folgendes geschrieben Zum zitierten Posting springen:
Mein Drittprogramm, welches die XML verwendet meldet, dass die XML beschädigt sei
Die haben wohl schnell einen eigenen XML-Parser zusammengekleistert :lol: ?

Du brauchst einen XmlWriter mit einem Space als XmlWriterSettings.IndentChars.

_________________
>λ=
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 15.02.11 07:53 
Aber warum sollte denn die XML beschädigt sein, bloß weil dort die Einrückungen nicht mehr so schön sind?
Ich meine, das könnte auch alles in einer Zeile stehen, und wäre immer noch eine wohlgeformte XML. Zumal Du mit dem XDocument eigentlich auch nur "richtige" XML erstellen kannst, ansonsten knallt es schon davor.

Kann es sein, das in der Original-XML ein Schema angegeben ist (xsd) und Namespaces verwendet werden, die Du aber beim ändern nicht beachtet hast? Und die XML dann beim Einlesen gegen dieses Schema geprüft wird? Aber sehe bei den beiden XML (bis auf die Einrückungen) sowieso keine Unterschiede, auch nicht bei dem Attribut FilePath.
Marko
PachN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 15.02.11 11:48 
Moin, keine Ahung warum das Programm das als Fehler ansieht.
Da kenn ich auch den Quelltext nicht.
Aber ich habe denke ich die Lösung gefunden, komm leider erst heute Abend dazu es "produktiv" zu testen.

Tausche diese Zeile:

ausblenden C#-Quelltext
1:
xmlDoc = XDocument.Load(filePath);					



gegen diese:

ausblenden C#-Quelltext
1:
xmlDoc = XDocument.Load(filePath, LoadOptions.PreserveWhitespace);					


und schon werden keine zusätzlichen Blanks gesetzt :)
Warum das defaultmässig gemacht wird müsste man wohl die Entwickler fragen.
Jedenfalls geht es jetzt.

Danke euch!

MfG PachN