Bei der Generierung von XML in C#, gibt es ein Problem mit der Generierung als String? In der Vergangenheit habe ich festgestellt, dass XML programmatisch sehr ausführlich und komplex ist. Das Erstellen des XML-Zeichens durch String-Verkettung/ein String-Builder scheint viel einfacher zu sein, aber es fühlt sich an wie eine schlechte Übung.
Sollte ich XML als Zeichenfolge generieren?Sollte ich XML als Zeichenfolge in C# generieren?
Antwort
Die XDocument-, XElement- und XAttribute-Klassen machen die XML-Generierung in C# viel einfacher. Dann mit dem XmlDocument oder XmlWriter.
<RootElement>
<ChildElement Attribute1="Hello" Attribute2="World" />
<ChildElement Attribute1="Foo" Attribute2="Bar" />
</RootElement>
Sie können dies tun:
XDocument xDocument = new XDocument(
new XElement("RootElement",
new XElement("ChildElement",
new XAttribute("Attribute1", "Hello"),
new XAttribute("Attribute2", "World")
),
new XElement("ChildElement",
new XAttribute("Attribute1", "Foo"),
new XAttribute("Attribute2", "Bar")
)
)
);
Muss dies versuchen. Vielen Dank! – macleojw
@Downvoter: Interessieren Sie sich warum? –
Erstellen der XML durch die String-Verkettung ist definitiv eine schlechte Praxis
Als Beispiel diese zu produzieren. Das XmlDomDocument ist nicht sehr ausführlich oder convoluted; Ich fand es immer ziemlich einfach (und sicher) mit ihm zu arbeiten.
Nein, sollten Sie nicht. Die XML-Bibliotheken in .NET (und anderen Plattformen) stellen sicher, dass Sie gültiges XML erstellen, und sparen Ihnen viel Zeit beim erneuten Analysieren. Wenn jemand anderes Ihr XML verwenden und sich darüber beschwert, dass es falsch ist, können Sie das tun Ausschließen der eigentlichen XML-Datei selbst und spart Ihnen viel Zeit beim Überprüfen, ob Sie richtig verketten.
Haben Sie Linq zu Xml versucht? es ist nicht sehr ausführlich:
XElement xml = new XElement("contacts",
new XElement("contact",
new XAttribute("id", "1"),
new XElement("firstName", "first"),
new XElement("lastName", "last")
),
new XElement("contact",
new XAttribute("id", "2"),
new XElement("firstName", "first2"),
new XElement("lastName", "last2")
)
);
Console.Write(xml);
ein XmlTextWriter verwenden, können Sie die Ergebnisse in eine String fallen kann und die resultierende Zeichenfolge verwenden. Mit dem XmlTextWriter können Sie den Inhalt auch in einen Stream einfügen. Also, wenn Sie nach Flexibilität suchen, verwenden Sie einen XmlTextWriter.
Wenn Ihre Frage über das Konstruieren einer XML-Datei durch Zeichenfolgenverkettung ist, tun Sie das nicht. Verwenden Sie einen StringBuilder, wenn Sie ein XML-Dokument ohne weitere Hilfe zusammenstellen möchten.
Ich würde vermeiden, manuell erstellen die XML durch "Verkettung". Sie erhöhen die Wahrscheinlichkeit von Fehlern in der generierten XML-Datei. Die XML-Erstellungsklassen von Microsoft wurden ziemlich gründlich getestet. Nutzen Sie das zu Ihrem Vorteil.
Ich würde den folgenden Ansatz in den meisten Fällen empfehlen, wenn Sie XML generieren.
- Eine XSD für Ihre XML-
- Kompilieren Sie das XSD in ein Objekt
- Bestücken Sie Ihr Objekt
- De-Serialisierung Ihr Objekt in xml
Benifits diese über nur zu tun, die Schaffung XML mit den XMLDocuments 1. Es ist gut mit einem XSD definiert. Andere Entwickler wissen, welche XML sie erhalten (oder was sie ändern). 2. Einfach in der Zukunft zu ändern. 3. Weit größere weniger Chance von Tippfehler in Ihrem XML-Dokument.
Lassen Sie mich wissen, ob Sie Codebeispiele oder zusätzliche Unterstützung bei der Ausführung benötigen.
Hinweis: Wir generieren unsere CS-Dateien zum Zeitpunkt der Erstellung von xsds, um sicherzustellen, dass jemand den generierten Code nicht manuell ändert.
Sie meinen serialisieren in xml, oder? –
Das ist ein wirklich guter Weg, es in vielen Fällen zu tun. –
Ja, aber er schrieb de-serialisieren. –
Bevor Sie über das Generieren von XML mit String-Verkettung statt einer richtigen Bibliothek nachdenken, lesen Sie bitte die XML specification. Achten Sie besonders auf Feinheiten wie Zeichensatz und Zeichen.
Sie können es jetzt tun. Ich werde warten.
Jetzt fragen Sie sich - möchten Sie wirklich sicherstellen müssen, dass Ihre verkettete Zeichenfolge gemäß all diesen Regeln gültig ist und alle Hilfsfunktionen selbst schreibt, oder möchten Sie eine gut getestete Bibliothek verwenden, die all diese Logik hat für dich gekapselt worden?
Gut.
Froh, dass das sortiert ist.
Ich empfehle auch http://hsivonen.iki.fi/producing-xml/ für eine Zusammenfassung der Liste der Probleme beim Schreiben von XML aus ... –
+1 für eigentlich einen Grund zu geben, warum es durch String-Verkettung ist eine schlechte Idee –
XmlWriter ist nicht so schlimm, wenn Sie Ihren Code sind Formatierung korrekt:
StringBuilder builder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(builder))
{
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteStartElement("Node1");
writer.WriteAttributeString("att1", "value");
writer.WriteEndElement();
writer.WriteStartElement("Node2");
writer.WriteString("inner text");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
Sie auch identation in Ihrem Code zu erleichtern das Verständnis hinzufügen könnte.
using (XmlWriter writer = XmlWriter.Create(builder))
{
writer.WriteStartDocument();
{
writer.WriteStartElement("root");
{
writer.WriteStartElement("Node1");
writer.WriteAttributeString("att1", "value");
writer.WriteEndElement();
writer.WriteStartElement("Node2");
writer.WriteString("inner text");
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndDocument();
}
- 1. XML in Lua sicher generieren
- 2. Erstellen einer Xml-Zeichenfolge in C++
- 3. XML-Syntax zum Generieren von C# -Code
- 4. XmlWriter C# -Code aus XML generieren
- 5. Sollte ich "int" oder "bool" als Rückgabewert in C++ verwenden?
- 6. Wie schreibe ich eine Zeichenfolge (XML-Knoten ohne Root-Knoten) als Knoten mit XMLWriter in C#?
- 7. Was ist der einfachste Weg, XML in C++ zu generieren?
- 8. XML-Zeichenfolge "Ja/Nein" in Boolean umwandeln
- 9. Wie kann ich XML in C# erstellen?
- 10. Wie dupliziere ich diese Zeichenfolge in C?
- 11. Generieren HTML-Zeichenfolge aus AngularJS Vorlage Zeichenfolge
- 12. Wie übergebe ich eine Zeichenfolge als Methodenparameter in objective-c?
- 13. Wie verwende ich eine beliebige Zeichenfolge als Sperre in C++?
- 14. Speichern einer Zeichenfolge als UTF8 in C#
- 15. XML generieren - Knoten ausschließen
- 16. XML-Datei aus Modelldaten generieren
- 17. CodeRefactoringProvider sollte neue Datei generieren
- 18. Sollte eine C# -Klasse Instanzen von sich selbst generieren?
- 19. Servlets Erträge/generieren eindeutige Zeichenfolge
- 20. Generieren zufällige UTF-8-Zeichenfolge in Python
- 21. HMAC-SHA1 in C generieren #
- 22. Add Attribut und Zeichenfolge zu XML-Datei in C#
- 23. Wie eine XML-Zeichenfolge als Aktion Ergebnis in MVC
- 24. Verwendung/Konvertierung von XML-Zeichenfolge als Parameter in Xsl-Umwandlung
- 25. RSA-Schlüsselpaar generieren und privat als Zeichenfolge codieren
- 26. Drupal-Ansichten: XML-Datei generieren
- 27. C++ XML-Kommentare zum Generieren von MSDN-Stil CHM
- 28. Generieren Farbverlauf in C#
- 29. erhalten xml-Deklaration in Zeichenfolge durch xdocument in C#
- 30. Modell XML als Objekte oder als XML?
String Verkettung ist in Ordnung, bis das erste Mal, wenn ein Attributwert enthält eine & – AakashM
String Verkettung ist in Ordnung, bis das erste Mal etwas etwas hat man nicht erklären hat. –
Danke für alle Antworten. – macleojw