Ich habe vor kurzem in VS2010 eine kleine C # -Formulare / LINQ to XML-Anwendung erstellt, die genau das tut, was sie tun soll, mit einer Ausnahme: Sie fügt "[]" am Ende des DOCTYPE-Tags hinzu, was offensichtlich verursacht Dateien, die von einem Altsystem zurückgewiesen werden sollen. Hier ist ein Vorher und Nachher:
Vorher
%Vor%Nach
%Vor%Diese Zeichen werden hinzugefügt, nachdem die Datei mit der Funktion .Save im Programm gespeichert wurde. Das Programm erlaubt die Auswahl einer .xml-Datei, "säubert" sie dann durch Entfernen bestimmter Tags und speichert sie dann. Wenn der Prozess beginnt, haben die Dateien nicht die "[]" in DOCTYPE. Nach dem Speichern tun sie es. Fügt LINQ to XML diese hinzu?
Gibt es eine Möglichkeit, das Programm davon abzuhalten, diese Zeichen hinzuzufügen?
Wenn XDocument
offensichtlich ein XML-Dokument analysiert, das eine Dokumenttypdeklaration enthält, wird automatisch eine leere "interne Teilmenge" eingefügt, falls keine vorhanden ist. (Die interne Teilmenge ist der Teil, der von []
in <!DOCTYPE>
umgeben ist.)
Das Ergebnis ist wohlgeformtes XML. Wenn Ihr Altsystem jedoch nicht damit umgehen kann, können Sie die interne Teilmenge aus der DTD entfernen, indem Sie XDocumentType.InternalSubset
Eigenschaft für null
:
Wenn Sie auf Mono (wie cod3monk3y) mit Fällen wie dem Ändern von Info.plist arbeiten, können Sie die alte XmlDocument-Klasse verwenden, um Dinge zu beheben, nachdem Sie mit XDocument Ihre XML-Datei erstellt / geändert haben.
Der Code geht davon aus, dass sich Ihre Datei "Info.plist" im Pfad infoPlist befindet:
%Vor%Tags und Links c# visual-studio-2010 xml linq-to-xml