C как из xmldocument получить класс
Перейти к содержимому

C как из xmldocument получить класс

Xml Document Класс

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Представляет XML-документ. Этот класс можно использовать для загрузки, проверки, изменения, добавления и размещения XML-кода в документе.

Комментарии

Класс XmlDocument представляет xml-документ в памяти. Он реализует объектную модель xml-документов W3C (DOM) уровня 1 и уровень DOM 2.

Модель DOM обозначает объектную модель документа. Дополнительные сведения см. в статье об объектной модели XML-документа (DOM).

Xml можно загрузить в модель DOM с помощью XmlDocument класса, а затем программно читать, изменять и удалять XML в документе.

Если вы хотите открыть XmlDocument класс и посмотреть, как он реализован, см. справочник по источнику.

Задания

Загрузка XML в объектную модель документа

Начните с XML-документа, подобного этому документу, который содержит несколько книг в коллекции. Он содержит основные элементы, которые можно найти в любом XML-документе, включая пространство имен, элементы, представляющие данные и атрибуты, описывающие данные.

Затем загрузите эти данные в модель DOM, чтобы работать с ней в памяти. Наиболее популярным способом этого является ссылка на файл на локальном компьютере или в сети.

Этот пример загружает XML из файла. Если файл не существует, он просто создает xml-код и загружает его.

Проверка на соответствие схеме

Начните со схемы XML, как показано ниже. Эта схема определяет типы данных в XML и необходимые атрибуты.

XmlReader Создайте объект с помощью схемы, а затем загрузите этот объект в модель DOM. Создайте обработчик событий, который выполняется при попытке кода изменить XML-файл способами, нарушающими правила схемы.

В этих блоках кода показаны вспомогательные методы, которые делают все это.

Навигация по дереву документа

Свойства можно использовать для перемещения по XML-документу. Но прежде чем использовать любой из них, давайте быстро рассмотрим несколько терминов. Документ состоит из узлов. Каждый узел имеет один родительский узел непосредственно над ним. Единственным узлом, у которых нет родительского узла, является корневой каталог документа, так как он является узлом верхнего уровня. Большинство узлов могут иметь дочерние узлы, которые являются узлами непосредственно под ними. Узлы, которые находятся на том же уровне, являются одноуровневые узлы.

В следующих примерах показано, как получить корневой узел, перейти к первому дочернему узлу корневого узла, получить доступ к любому из его дочерних узлов, вернуться к родительскому узлу, а затем перейти по одноуровневым узлам.

Начало работы с корневым узлом

В этом примере возвращается корневой узел, а затем этот узел используется для вывода содержимого документа в консоль.

Получение дочерних узлов

В этом примере выполняется переход к первому дочернему узлу корневого узла, а затем выполняется итератор по дочерним узлам этого узла, если таковой существует.

Вернитесь к родительскому узлу

Ссылка на последний дочерний узел

В этом примере цена книги записывается в консоль. Узел цены является последним дочерним элементом узла книги.

Переход вперед между братьями и сестрами

В этом примере выполняется переход от книги к книге. Узлы книг — это одноуровневые узлы друг с другом.

Переход назад между одноуровневыми элементами

Этот пример перемещается назад от книги к книге.

Поиск узлов

Наиболее популярным способом поиска одного или нескольких узлов данных является использование строки запроса XPath, но существуют также методы, которые не требуют одного.

Получение одного узла

В этом примере выполняется поиск книги с использованием номера ISBN.

Строка, используемая в этом примере, является запросом Xpath. Дополнительные примеры см. здесь: примеры XPath.

Вы также можете использовать его для GetElementById получения узлов. Чтобы использовать этот подход, необходимо определить идентификаторы в объявлениях определения типа документа XML-файла.

После получения узла вы получите значение атрибутов или дочерних узлов. В этом примере это происходит с узлом книги.

Получение коллекции узлов

В этом примере выбираются все книги, в которых фамилия автора — Austen, а затем изменяется цена этих книг.

Вы также можете получить коллекцию узлов, используя имя узла. Например, в этом примере получается коллекция всех названий книг.

Изменение узлов

В этом примере редактируется узел книги и его атрибуты.

Добавление узлов

Чтобы добавить узел, используйте CreateElement метод или CreateNode метод.

Чтобы добавить узел данных, например книгу, используйте CreateElement этот метод.

Для любого другого типа узла, например примечания, узла пробелов или узла CDATA, используйте CreateNode этот метод.

В этом примере создается узел книги, добавляется атрибуты к этому узлу, а затем добавляется этот узел в документ.

Дополнительные сведения: вставка узлов в XML-документ

Удаление узлов

Чтобы удалить узел, используйте RemoveChild метод.

В этом примере удаляется книга из документа и все пробелы, которые отображаются непосредственно перед узлом книги.

Размещение узлов

Вы можете выбрать место отображения узла в документе с помощью InsertBefore методов и InsertAfter методов.

В этом примере показаны два вспомогательных метода. Один из них перемещает узел выше в списке. Другой перемещает узел ниже.

Эти методы можно использовать в приложении, которое позволяет пользователям перемещать книги вверх и вниз в списке книг. Когда пользователь выбирает книгу и нажимает кнопку вверх или вниз, код может вызывать такие методы, как эти, для размещения соответствующего узла книги до или после других узлов книги.

Конструкторы

Инициализирует новый экземпляр класса XmlDocument.

Инициализирует новый экземпляр класса XmlDocument указанным значением XmlImplementation.

Инициализирует новый экземпляр класса XmlDocument указанным значением XmlNameTable.

Свойства

Возвращает класс XmlAttributeCollection, содержащий атрибуты данного узла.

Возвращает базовый URI текущего узла.

Возвращает все дочерние узлы данного узла.

Возвращает корень XmlElement для документа.

Возвращает узел, содержащий объявление DOCTYPE.

Возвращает первый дочерний узел данного узла.

Возвращает значение, свидетельствующее о наличии дочерних узлов у текущего узла.

Возвращает объект XmlImplementation для текущего документа.

Во всех случаях вызывает исключение InvalidOperationException.

Возвращает или задает связанные значения узла и всех его дочерних узлов.

Возвращает или задает разметку, отражающую дочерние узлы текущего узла.

Возвращает значение, определяющее, доступен ли текущий узел только для чтения.

Возвращает первый дочерний элемент с помощью указанного свойства LocalName и NamespaceURI.

Возвращает первый дочерний элемент с помощью указанного свойства Name.

Возвращает последний дочерний узел данного узла.

Возвращает локальное имя узла.

Возвращает полное имя узла.

Возвращает URI пространства имен данного узла.

Возвращает класс XmlNameTable, связанный с данной реализацией.

Возвращает узел, следующий сразу за данным узлом.

Возвращает тип текущего узла.

Возвращает разметку, содержащую данный узел и все его дочерние узлы.

Возвращает XmlDocument, к которому принадлежит текущий узел.

Возвращает родительский узел для данного узла (только узлов, у которых они могут быть).

Возвращает родительский узел для данного узла (только для тех узлов, которые могут иметь родительские узлы).

Возвращает или задает префикс пространства имен данного узла.

Возвращает или задает значение, определяющее, будут ли сохранены знаки-разделители в содержимом элемента.

Возвращает узел, непосредственно предшествующий данному узлу.

Возвращает текстовый узел, непосредственно предшествующий данному.

Возвращает информационный набор после проверки схемы (PSVI) для этого узла.

Возвращает информационный набор после проверки схемы (назначенный этому узлу в результате проверки схемы).

Возвращает или задает объект XmlSchemaSet, связанный с данным объектом XmlDocument.

Возвращает или задает значение узла.

Задает XmlResolver, используемый для разрешения внешних ресурсов.

Методы

Добавляет указанный узел в конец списка дочерних узлов данного узла.

Создает дубликат этого узла.

Создает дубликат этого узла.

Создает объект XmlAttribute с указанным Name.

Создает XmlAttribute с помощью указанного полного имени и NamespaceURI.

Создает объект XmlAttribute с помощью указанных значений Prefix, LocalName и NamespaceURI.

Создает объект XmlCDataSection, содержащий указанные данные.

Создает объект XmlComment, содержащий указанные данные.

Создает атрибут по умолчанию с помощью указанного префикса, локального имени и URI пространства имен.

Возвращает новый объект XmlDocumentType.

Создает элемент с указанным именем.

Создает XmlElement с помощью полного имени и NamespaceURI.

Создает элемент с помощью указанных Prefix, LocalName и NamespaceURI.

Создает объект XmlEntityReference с указанным именем.

Создает новый объект XPathNavigator для навигации в данном документе.

Создает класс XPathNavigator для перемещения данного объекта.

Создает объект XPathNavigator для навигации в данном документе, расположенном в указанном узле XmlNode.

Создает XmlNode с помощью указанного типа узла, а также свойств Name и NamespaceURI.

Создает объект XmlNode с помощью указанных значений XmlNodeType, Name и NamespaceURI.

Создает объект XmlNode с помощью указанных типов XmlNodeType, Prefix, Name и NamespaceURI.

Создает XmlProcessingInstruction с помощью указанного имени и данных.

Создает объект XmlText с указанным текстом.

Создает узел XmlDeclaration с указанными значениями.

Определяет, равен ли указанный объект текущему объекту.

Возвращает элемент XmlElement с указанным идентификатором.

Возвращает значение XmlNodeList, содержащее список всех элементов-потомков, соответствующих указанному имени Name.

Возвращает XmlNodeList, содержащий список всех элементов-потомков, соответствующих указанным значениям LocalName и NamespaceURI.

Возвращает перечислитель, выполняющий итерацию дочерних узлов текущего узла.

Служит хэш-функцией по умолчанию.

Ищет наиболее точное объявление xmlns для заданного префикса, принадлежащее области действия текущего узла, и возвращает универсальный код ресурса (URI) пространства имен в объявлении.

Ищет наиболее точное объявление xmlns для универсального кода ресурса (URI) пространства имен, принадлежащее области действия текущего узла, и возвращает префикс, определенный в этом объявлении.

Возвращает объект Type для текущего экземпляра.

Импортирует в текущий документ узел из другого документа.

Вставляет заданный узел сразу после указанного узла ссылки.

Вставляет заданный узел сразу перед указанным узлом ссылки.

Загружает XML-документ из указанного потока.

Загружает XML-документ из указанного URL-адреса.

Загружает XML-документ из указанного TextReader.

Загружает XML-документ из указанного XmlReader.

Загружает XML-документ из указанной строки.

Создает неполную копию текущего объекта Object.

Помещает все узлы XmlText на максимальную глубину поддерева, расположенного под данным узлом XmlNode, в обычную форму, где узлы XmlText разделяются только разметкой (теги, примечания, комментарии, инструкции по обработке, разделы CDATA и ссылки на сущности). Смежные узлы XmlText отсутствуют.

Добавляет указанный узел в начало списка дочерних узлов данного узла.

Создает объект XmlNode на основе данных из XmlReader. Средство чтения должно быть позиционировано на узел или атрибут.

Удаляет все дочерние узлы и (или) атрибуты текущего узла.

Удаляет указанный дочерний узел.

Заменяет дочерний узел oldChild на узел newChild .

Сохраняет XML-документ в указанном потоке.

Сохраняет XML-документ в указанном файле. Если указанный файл существует, метод перезаписывает его.

Сохраняет XML-документ в указанном TextWriter.

Сохраняет XML-документ в указанном XmlWriter.

Выбирает список узлов в соответствии с выражением XPath.

Выбирает список узлов в соответствии с выражением XPath. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного XmlNamespaceManager.

Выделяет первый объект XmlNode , соответствующий выражению XPath.

Выделяет первый объект XmlNode , соответствующий выражению XPath. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного XmlNamespaceManager.

Проверяет, присутствует ли указанное средство в реализации DOM.

Возвращает строку, представляющую текущий объект.

Проверяет XmlDocument по схемам языка XSD, содержащимся в свойстве Schemas.

Проверяет указанный объект XmlNode по схемам языка XSD, содержащимся в свойстве Schemas.

Сохраняет все дочерние узлы узла XmlDocument в заданном XmlWriter.

Сохраняет узел XmlDocument в заданном XmlWriter.

События

Возникает при изменении свойства Value узла, принадлежащего данному документу.

Возникает при намерении изменить свойство Value узла, принадлежащего данному документу.

Возникает после вставки узла, принадлежащего данному документу, в другой узел.

Возникает перед вставкой узла, принадлежащего данному документу, в другой узел.

Возникает после удаления узла, принадлежащего данному документу, из родительского узла.

Возникает перед удалением узла из документа.

Явные реализации интерфейса

Описание этого члена см. в разделе Clone().

Описание этого члена см. в разделе GetEnumerator().

Методы расширения

Приводит элементы объекта IEnumerable к заданному типу.

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

Позволяет осуществлять параллельный запрос.

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Создает новый объект навигатора XPath для навигации по указанному документу.

Создает объект навигатора XPath для навигации по указанному документу, размещенному на указанном узле.

Создает навигатор XPath для навигации по указанному узлу.

Выбирает список узлов, которые соответствуют указанному выражению XPath.

Выбирает список узлов, которые соответствуют указанному выражению XPath. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного диспетчера пространств имен.

Выделяет первый узел, соответствующий выражению XPath.

Выделяет первый узел, соответствующий выражению XPath. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного диспетчера пространств имен.

Создает экземпляр IXPathNavigable, используемый для создания навигаторов.

C как из xmldocument получить класс

Для работы с XML в C# можно использовать несколько подходов. В первых версиях фреймворка основной функционал работы с XML предоставляло пространство имен System.Xml . В нем определен ряд классов, которые позволяют манипулировать xml-документом:

XmlNode : представляет узел xml. В качестве узла может использоваться весь документ, так и отдельный элемент

XmlDocument : представляет весь xml-документ

XmlElement : представляет отдельный элемент. Наследуется от класса XmlNode

XmlAttribute : представляет атрибут элемента

XmlText : представляет значение элемента в виде текста, то есть тот текст, который находится в элементе между его открывающим и закрывающим тегами

XmlComment : представляет комментарий в xml

XmlNodeList : используется для работы со списком узлов

Ключевым классом, который позволяет манипулировать содержимым xml, является XmlNode , поэтому рассмотрим некоторые его основные методы и свойства:

Свойство Attributes возвращает объект XmlAttributeCollection , который представляет коллекцию атрибутов

Свойство ChildNodes возвращает коллекцию дочерних узлов для данного узла

Свойство HasChildNodes возвращает true , если текущий узел имеет дочерние узлы

Свойство FirstChild возвращает первый дочерний узел

Свойство LastChild возвращает последний дочерний узел

Свойство InnerText возвращает текстовое значение узла

Свойство InnerXml возвращает всю внутреннюю разметку xml узла

Свойство Name возвращает название узла. Например, <user> — значение свойства Name равно «user»

Свойство ParentNode возвращает родительский узел у текущего узла

Применим эти классы и их функционал. И вначале для работы с xml создадим новый файл. Назовем его people.xml и определим в нем следующее содержание:

Теперь пройдемся по этому документу и выведем его данные на консоль:

В итоге я получу следующий вывод на консоли:

Чтобы начать работу с документом xml, нам надо создать объект XmlDocument и затем загрузить в него xml-файл: xDoc.Load(«people.xml»);

При разборе xml для начала мы получаем корневой элемент документа с помощью свойства xDoc.DocumentElement . Далее уже происходит собственно разбор узлов документа.

В цикле foreach(XmlNode xnode in xRoot) пробегаемся по всем дочерним узлам корневого элемента. Так как дочерние узлы представляют элементы <person> , то мы можем получить их атрибуты: XmlNode attr = xnode.Attributes.GetNamedItem(«name»); и вложенные элементы: foreach(XmlNode childnode in xnode.ChildNodes)

Чтобы определить, что за узел перед нами, мы можем сравнить его название: if(childnode.Name==»company»)

Подобным образом мы можем создать объекты классов и структур по данным из xml:

В данном случае определен класс Person с тремя свойствами. При переборе узлов файла xml значения элементов и их атрибутов передается объекту класса Person.

Как конвертировать XML / JSON файл в C# класс?

  1. скопируйте содержимое XML-файла в буфер обмена
  2. добавьте к вашему решению новое, пустое файл класса ( Shift + Alt + C )
  3. открыть файл и в меню выберите Edit > Paste special > Paste XML As Classes
    enter image description here

использование

использование очень просто с этим вспомогательным классом:

все, что вам нужно сделать сейчас, это:

здесь у вас есть некоторые онлайн XML <—> JSON преобразователи: клик

вы можете следовать этому простому шагу

использовать XML Schema Definition Tool xsd.exe найдено в рамках инструментов для преобразования схемы в сериализуемый класс или набор данных.

и в Примере, тогда как класс C# будет создан в том же каталоге, что и инструмент xsd:

использовать простой способ, используя ‘ вставить XML как классы’в меню Visual studio.

1.скопируйте источник xml в буфер обмена, что-то вроде CTRL+A и CTRL+C

2.Перейдите в меню «Правка» — > Вставить специальный — > вставить XML как классы, чтобы вставить сгенерированные классы на основе исходного xml»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *