C # LINQ TO XML - Entfernen Sie "[]" Zeichen aus dem DTD-Header

8

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?

    
ewomack 10.09.2012, 19:17
quelle

2 Antworten

11

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 :

%Vor%     
Michael Liu 10.09.2012, 19:38
quelle
7

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%     
aggieNick02 08.05.2013 23:17
quelle