Mam usługę WCF, która musi zwrócić ciąg XML. Ale wygląda na to, że piszący chce tylko utworzyć plik, a nie ciąg. Próbowałem:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
To generuje błąd informujący, że nextXMLstring nie ma ścieżki do pliku. Chce czegoś takiego:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
Jak mogę zbudować mój XML, a następnie zwrócić go jako ciąg?
Dzięki!!
Jak powiedział Richard,
StringWriter
jest droga naprzód. Jest jednak jeden problem: domyślnieStringWriter
będzie się reklamować jako będący w UTF-16. Zwykle XML jest w UTF-8. Możesz to naprawić, tworząc podklasę StringWriter;Wpłynie to na oświadczenie sporządzone przez
XmlWriter
. Oczywiście, jeśli następnie napiszesz ciąg w innym miejscu w formie binarnej, upewnij się, że używasz kodowania, które pasuje do dowolnego kodowania, które naprawisz dlaStringWriter
. (Powyższy kod zawsze zakłada UTF-8; trywialne jest stworzenie bardziej ogólnej wersji, która akceptuje kodowanie w konstruktorze.)Wtedy użyłbyś:
źródło
writer
to nie jest usuwane więcej niż raz?Wiem, że to jest stare i odpowiedziałem, ale oto inny sposób, aby to zrobić. Szczególnie jeśli nie chcesz, aby BOM UTF8 znajdował się na początku ciągu i chcesz, aby tekst był wcięty:
źródło
Encoding.UTF8.GetString(ms.ToArray())
to uproszczenie po powrocie.ms.ToArray()
nie zwraca żadnych pozycji, gdy próbowałem tego. Musiał dodaćx.Close()
lub przenieść instrukcję return tuż poza wewnętrzną instrukcję using.Zastosowanie
StringBuilder
:źródło
Chłopaki nie zapominają o wywołaniu xmlWriter.Close () i xmlWriter.Dispose (), bo inaczej twój string nie zakończy tworzenia. Będzie to po prostu pusty ciąg
źródło
xmlWriter.Close()
było rozwiązaniem.Cóż, myślę, że najprostszym i najszybszym rozwiązaniem byłoby po prostu:
źródło