XPathDocument против XmlDocument - PullRequest
       14

XPathDocument против XmlDocument

7 голосов
/ 21 августа 2011

Я разрабатываю движок блогов в ASP.NET, и один из репозиториев реализован для использования файлов XML в качестве хранилища данных. репозиторий XML будет в основном использоваться для локального использования и в целях тестирования. сейчас, хотя это может и не быть проблемой современных компьютеров, которые имеют много доступной памяти и вычислительной мощности, но тем не менее я хотел бы знать некоторые конкретные детали:

  • XPathDocument является документом только для чтения, тогда как XmlDocument является документом для чтения / записи. Следовательно, является ли XPathDocument более легким, чем XmlDocument, поскольку в нем отсутствуют возможности записи?
  • Я точно знаю, что когда вы загружаете XML-документ с помощью XmlDocument, он загружает весь документ в память, это может быть проблемой, если размер документа большой. XPathDocument делает то же самое? Если да, как я могу прочитать один узел или набор узлов из документа XML, не загружая сначала весь документ в память? Я знаю, что могу использовать XmlTextReader, но это означает, что я должен анализировать весь документ при последовательном доступе к узлам. Я хочу иметь возможность запрашивать документы XML с помощью выражения XPath.

В любом случае, если размеры графов объектов не сильно различаются (XmlDocument и XPathDocument), это не помешает просто выполнить работу, но я хочу реализовать здесь лучшее из возможных решений.

1 Ответ

6 голосов
/ 21 августа 2011

XPathDocument также считывает весь документ в память, что необходимо для поддержки всех осей XPath , таких как предшествующий брат, предшествующий, родительский, родительский, дочерний, дочерний, дочерний, последующий. 1003 *

Если вы хотите выполнять запросы XPath или XQuery без загрузки всего документа в память, вам нужно обратиться к специализированным базам данных XML или, по крайней мере, к базам данных SQL с типом данных XML с поддержкой XQuery. Например, сервер MS SQL имеет тип данных XML и поддерживает некоторые (на мой взгляд, довольно ограниченные) версии XQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...