Agora estou aprendendo, XmlDocument
mas acabei de encontrar XDocument
e, quando tento pesquisar a diferença ou os benefícios deles, não consigo encontrar algo útil, você poderia me dizer por que usaria um sobre o outro?
c#
xml
xmldocument
linq-to-xml
Tarik
fonte
fonte
Respostas:
Se você estiver usando .NET versão 3.0 ou inferior, você tem de usar
XmlDocument
também conhecido como o DOM API clássico. Da mesma forma, você encontrará outras APIs que esperam isso.Se você escolher, no entanto, recomendo o uso do
XDocument
LINQ to XML. É muito mais simples criar documentos e processá-los. Por exemplo, é a diferença entre:e
É fácil trabalhar com namespaces no LINQ to XML, diferente de qualquer outra API XML que eu já vi:
O LINQ to XML também funciona muito bem com o LINQ - seu modelo de construção permite criar elementos com sequências de subelementos com muita facilidade:
É tudo muito mais declarativo, que se encaixa no estilo geral do LINQ.
Agora, como Brannon mencionou, essas são APIs na memória, em vez de streaming (embora
XStreamingElement
suporte a saída lenta).XmlReader
eXmlWriter
são as formas normais de transmitir XML em .NET, mas você pode misturar todas as APIs até certo ponto. Por exemplo, você pode transmitir um documento grande, mas usar o LINQ to XML, posicionando umXmlReader
no início de um elemento, lendo umXElement
e processando-o e depois passando para o próximo elemento etc. Há várias postagens de blog sobre essa técnica, aqui está um que encontrei com uma pesquisa rápida .fonte
Surpreende-me que nenhuma das respostas até agora mencione o fato de
XmlDocument
não fornecer informações de linha , enquantoXDocument
fornece (através daIXmlLineInfo
interface).Isso pode ser um recurso crítico em alguns casos (por exemplo, se você deseja relatar erros em um XML ou acompanhar onde os elementos são definidos em geral) e é melhor estar ciente disso antes de começar a implementar usando
XmlDocument
, para posteriormente descubra que você precisa mudar tudo.fonte
XDocument
isso fornece informações de linha. Consulte XDocument.Load withLoadOptions.SetLineInfo
como um segundo argumento. Se você conhece uma maneira de obter informações de linha,XmlDocument
estou curioso; Quando escrevi esta resposta, não encontrei nenhuma. Esta outra resposta parece confirmar: stackoverflow.com/a/33622102/253883 #XmlDocument
é ótimo para desenvolvedores familiarizados com o modelo de objeto XML DOM. Já existe há algum tempo e corresponde mais ou menos a um padrão W3C. Ele suporta navegação manual eXPath
seleção de nós.XDocument
habilita o recurso LINQ to XML no .NET 3.5. Faz uso pesadoIEnumerable<>
e pode ser mais fácil trabalhar com C # direto.Os dois modelos de documento exigem que você carregue o documento inteiro na memória (diferente de,
XmlReader
por exemplo).fonte
XDocument
é da API LINQ to XML eXmlDocument
é a API padrão do estilo DOM para XML. Se você conhece bem o DOM e não quer aprender LINQ to XML, vá comXmlDocument
. Se você é novato em ambos, confira esta página que compara os dois e escolha qual deles você mais gosta.Acabei de começar a usar o LINQ to XML e adoro a maneira como você cria um documento XML usando construção funcional. É muito legal. DOM é desajeitado em comparação.
fonte
Como mencionado em outro lugar, sem dúvida, o Linq to Xml facilita muito a criação e a alteração de documentos xml
XmlDocument
, e aXNamespace ns + "elementName"
sintaxe proporciona uma leitura agradável ao lidar com espaços para nome.Uma coisa que vale a pena mencionar
xsl
expath
ressaltar é que ainda é possível executarxpath 1.0
expressões arbitrárias no Linq 2 XmlXNodes
, incluindo:e então podemos navegar e projetar dados usando
xpath
esses métodos de extensão:Por exemplo, dado o documento Xml:
Podemos avaliar:
fonte
Além disso, observe que
XDocument
há suporte para Xbox 360 e Windows Phone OS 7.0. Se você os segmentar, desenvolvaXDocument
ou migre paraXmlDocument
.fonte
Acredito que isso
XDocument
faça muito mais chamadas de criação de objetos. Eu suspeito que, quando você estiver lidando com muitos documentos XML,XMLDocument
será mais rápido.Um lugar em que isso acontece é no gerenciamento de dados de digitalização. Muitas ferramentas de varredura exibem seus dados em XML (por razões óbvias). Se você precisar processar muitos desses arquivos de digitalização, acho que terá melhor desempenho
XMLDocument
.fonte