2010-09-30 12 views
6

Korzystam z platformy .NET 4.0. Muszę napisać trochę kodu XML, aby wejść w interakcję z usługą sieciową. Parametry przekazywane do usługi internetowej będą wprowadzane przez użytkownika końcowego.Odczytywanie i zapisywanie kodu XML w języku C#

Moje pytanie brzmi, jakie jest zalecane podejście do interakcji z XML w dzisiejszych czasach? Wygląda na to, że z każdą wersją .NET Framework jest nowy sposób na zrobienie tego samego. Ale to niekoniecznie oznacza, że ​​jest najlepszy. Co społeczność zaleca w tym przypadku?

+0

Wszystko zależy od rodzaju XML, który chcesz wygenerować. A ponieważ jest to specyficzne dla usług internetowych, możesz otrzymać darmowe generowanie kodu XML, np. z WCF (chociaż w twoim pytaniu brakuje niezbędnych informacji, aby to wiedzieć). –

Odpowiedz

9

W każdej wersji nie ma nowej. Są tylko dwa. To niefortunne, że powinny być dwa, ale z pewnością nie ma ich więcej niż dwa.

Ten, który polecam, to System.Xml.Linq.XDocument i powiązane z nim klasy. Zapewniają czyste, użyteczne API, które pozwala na używanie LINQ i metod Enumerable extension. Generowanie drzewa XML w tym interfejsie API jest łatwe, ponieważ można zagnieżdżać wywołania konstruktorów, a kończy się to na kodzie bardzo podobnym do samego XML.

Ten, którego nie polecam, to System.Xml.XmlDocument. Jest stary i został zaprojektowany zgodnie z zaleceniami W3C dla interfejsu API XML. W związku z tym nie obsługuje żadnych nowoczesnych lub specyficznych dla C# pomysłów, w tym przeliczników i LINQ. Generowanie drzewa XML w tym interfejsie API jest kręte: musisz utworzyć każdy element indywidualnie i wywołać metody takie jak AppendChild, aby zamienić je w drzewo.

+1

Nie zapomnij o klasach "XPathDocument" i "XmlReader' /' XmlWriter'. I jest też serializator XML ... –

+0

Całkowicie się zgadzam - unikaj System.Xml.XmlDocument i naucz się korzystać z LINQ do XDocument XML - skończysz pisanie znacznie mniej kodu, kod, który napiszesz, będzie czystszy, szybsze i mniej błędne, a będziesz mógł ponownie używać wielu idiomów kodu LINQ przez resztę kodu. –

2

Jeśli usługa to WCF lub implementuje standardy WS- *, powinieneś mieć możliwość dodania do niej referencji do usługi z projektu i interakcji z nią za pośrednictwem jednostki, zamiast wykonywać wszystkie połączenia sieciowe i obsługiwać wiadomości ręcznie.

0

Za każdym razem, gdy potrzebuję pracować z XML, myślę o serializacji. Po prostu zaznacz klasę [Serializible] i właściwości z odpowiednim atrybutem od System.Xml.Serialization i po prostu serializuj obiekty. Działa to tylko wtedy, gdy format XML jest pewny, np. możesz opisać XML za pomocą klas. Jeśli nie podoba ci się @Timwi powiedział System.Xml.Linq.XDocument jest najlepszym wyborem.

Powiązane problemy