Чтение XML-данных с помощью XPathDocument и XmlDocument
Существует два способа чтения XML-документа в пространстве имен System.Xml.XPath. Один - считывание XML-документа с использованием доступного только для чтения класса XPathDocument, а другой - считывание XML-документа с использованием редактируемого класса XmlDocument в пространстве имен System.Xml.
Чтение XML-документов с использованием класса XPathDocument
Класс XPathDocument обеспечивает быстрое и доступное только для чтения представление XML-документа в памяти с использованием модели данных XPath. Экземпляры класса XPathDocument создаются с использованием одного из шести конструкторов. Эти конструкторы позволяют прочитать XML-документ с использованием как объектов Stream, TextReader или XmlReader, так и строкового string
пути к XML-файлу.
В следующем примере продемонстрировано использование конструктора XPathDocument класса string
для чтения XML-документа.
Dim document As XPathDocument = New XPathDocument("books.xml")
XPathDocument document = new XPathDocument("books.xml");
Чтение XML-документов с помощью класса XmlDocument
Класс XmlDocument представляет собой изменяемое в памяти представление XML-документа, реализующего модель W3C DOM базового уровня 1 и базового уровня 2. Экземпляры класса XmlDocument создаются с использованием одного из трех конструкторов. Можно создать новый, пустой объект XmlDocument путем вызова конструктора класса XmlDocument без параметров. После вызова конструктора используйте метод Load, чтобы загрузить XML-данные в новый объект XmlDocument из объекта Stream, TextReader или XmlReader, либо из строкового string
пути к XML-файлу.
В следующем примере продемонстрировано использование конструктора класса XmlDocument без параметров и метода Load для чтения XML-документа.
Dim document As XmlDocument = New XmlDocument()
document.Load("books.xml")
XmlDocument document = new XmlDocument();
document.Load("books.xml");
Определение кодировки XML-документа
Объект XmlReader можно использовать для чтения XML-документа и создания объектов XPathDocument и XmlDocument, как показано в предыдущих разделах. Однако объект XmlReader может считывать данные, которые не закодированы и не содержат никаких сведений о кодировке.
Класс XmlTextReader наследуется от класса XmlReader и предоставляет сведения о кодировке с помощью свойства Encoding. Его можно использовать для создания объекта XPathDocument или объекта XmlDocument.
Дополнительные сведения о кодировке, предоставляемых классом XmlTextReader см. в справочной документации по свойству Encoding класса XmlTextReader.
Создание объектов XPathNavigator
После считывания XML-документа в объект XPathDocument или XmlDocument, можно создать объект XPathNavigator для выбора, оценки, навигации и, в некоторых случаях, изменения базовых XML-данных.
Как класс XPathDocument, так и XmlDocument, наряду с классом XmlNode, реализуют интерфейс IXPathNavigable пространства имен System.Xml.XPath. В результате все три класса предоставляют метод CreateNavigator, который возвращает объект XPathNavigator.
Изменение XML-документов с помощью класса XPathNavigator
Кроме выборки, оценки и навигации по XML-данным, класс XPathNavigator в некоторых случаях можно использовать для изменения XML-документа, в зависимости от создавшего его объекта.
Класс XPathDocument предназначен только для чтения, а класс XmlDocument доступен для редактирования и, в результате, объекты XPathNavigator, созданные из объекта XPathDocument, не могут быть использованы для изменения XML-документа, а созданные из объекта XmlDocument - могут. Класс XPathDocument должен использоваться только для чтения XML-документа. В случаях, когда нужно изменить XML-документ или требуется доступ к дополнительной функциональности, предоставленной классом XmlDocument, например, при обработке событий, нужно использовать класс XmlDocument.
Свойство CanEdit класса XPathNavigator указывает, может ли объект XPathNavigator изменить XML-данные.
В следующей таблице описаны значения свойства CanEdit для каждого класса.
Реализация интерфейса IXPathNavigable | CanEdit Значение |
---|---|
XPathDocument | false |
XmlDocument | true |