Как разобрать xml файл
Я ищу способ захватить файлы XML и разобрать их как CSV. Файлы XML будут иметь те же самые необязательные элементы данных, но я в основном буду захватывать эти файлы XML каждые X минут, разбирать только определенные элементы и выводить их в CSV для дальнейшей обработки, такой как импорт в SQL и т.
Мне нужно обрабатывать большие файлы XML, но я хочу внести в них относительно небольшой набор изменений. Я также хочу, чтобы программа придерживалась строгих ограничений памяти. Мы никогда не должны использовать больше, чем, скажем, 300 мб ram. Есть ли библиотека, которая позволяет мне не хранить.
Вот несколько примеров:
Кроме того, есть некоторые другие методы , чтобы работать. Вот, например . И я думаю, что нет лучшего способа сделать это; вы всегда должны выбрать его сами, что наиболее подходит для вас.
Используйте хорошую схему XSD для создания набора классов с xsd.exe и используйте XmlSerializer для создания дерева объектов из вашего XML и наоборот. Если у вас есть несколько ограничений на вашу модель, вы можете даже попытаться создать прямое сопоставление между вашими классами модели и XML с Xml*Attributes.
Совет по производительности: создание XmlSerializer стоит дорого. Сохраните ссылку на свой экземпляр XmlSerializer , если вы собираетесь анализировать/записывать несколько файлов XML.
Если вы обрабатываете большой объем данных (много мегабайт), то вы хотите использовать XmlReader для потокового анализа XML.
Все остальное ( XPathNavigator , XElement , XmlDocument и даже XmlSerializer , если вы сохраняете полный сгенерированный граф объектов) приведет к высокому использованию памяти , а также очень медленному времени загрузки.
Конечно, если вам все равно нужны все данные в памяти, то у вас может не быть большого выбора.
Мне не нужно разбирать XML или декодировать его в объект ActionScript - меня интересует только загрузка как XSD, так и XML и определение того, является ли последний законным XML в соответствии с определением документа в первом.
Кто-нибудь знает, как разбирать большие файлы XML с помощью Xpath с помощью библиотеки vtd-xml в Scala ?
Обычно XPath облегчает чтение XML, что вы, возможно, и ищете.
Совсем недавно мне пришлось работать над приложением, которое включало анализ документа XML, и я согласен с Джоном Галлоуэем в том, что подход, основанный на LINQ-XML, на мой взгляд, является лучшим. Однако мне пришлось немного покопаться, чтобы найти полезные примеры, поэтому без лишних слов, вот несколько!
Любые комментарии приветствуются, так как этот код работает, но может быть не идеален, и я хотел бы узнать больше о разборе XML для этого проекта!
С помощью этих функций я смог проанализировать любой элемент и любой атрибут из файла XML без каких-либо проблем!
Если вам нужны возможности XPath , попробуйте XPathNavigator . Если вам нужен весь документ в памяти, попробуйте XmlDocument .
Кроме того, вы можете использовать селектор XPath следующим образом (простой способ выбора конкретных узлов):
Я не уверен, существует ли "best practice for parsing XML". Существует множество технологий, подходящих для различных ситуаций. Какой способ использовать, зависит от конкретного сценария.
Вы можете использовать LINQ to XML , XmlReader , XPathNavigator или даже регулярные выражения. Если вы подробно изложите свои потребности, я могу попытаться дать некоторые предложения.
Вы можете проанализировать XML, используя эту библиотеку System.Xml.Linq . Ниже приведен пример кода, который я использовал для анализа файла XML
Вы можете использовать ExtendedXmlSerializer для сериализации и десериализации.
Установка Вы можете установить ExtendedXmlSerializer из nuget или выполнить следующую команду:
Сериализация:
Десериализация
- Не поддерживает сериализацию класса с круговой ссылкой или класса со свойством интерфейса,
- Не поддерживает словари,
- Нет никакого механизма для чтения старой версии XML,
- Если вы хотите создать пользовательский сериализатор, ваш класс должен наследовать от IXmlSerializable. Это означает, что ваш класс не будет классом POCO,
- Не поддерживает IoC.
ExtendedXmlSerializer может сделать это и многое другое.
Вы можете использовать XmlDocument, а для манипулирования или извлечения данных из атрибутов вы можете использовать классы от Linq до XML.
Похожие вопросы:
Я получаю кучу файлов XML в папке. Я хочу продолжать проверять наличие файлов со следующим соглашением об именах: sr---matchresults.xml Разбирать, как только получу. Например.
Мне нужно разобрать потенциально большие файлы XML, из которых схема уже предоставлена мне в нескольких файлах XSD, поэтому привязка XML очень предпочтительна. Я хотел бы знать, могу ли я.
Я ищу способ захватить файлы XML и разобрать их как CSV. Файлы XML будут иметь те же самые необязательные элементы данных, но я в основном буду захватывать эти файлы XML каждые X минут, разбирать.
Мне нужно обрабатывать большие файлы XML, но я хочу внести в них относительно небольшой набор изменений. Я также хочу, чтобы программа придерживалась строгих ограничений памяти. Мы никогда не должны.
Мне не нужно разбирать XML или декодировать его в объект ActionScript - меня интересует только загрузка как XSD, так и XML и определение того, является ли последний законным XML в соответствии с.
Кто-нибудь знает, как разбирать большие файлы XML с помощью Xpath с помощью библиотеки vtd-xml в Scala ?
У меня есть много длинных документов,которые нужно разобрать. Формат документа похож на XML, но на самом деле не xml. Вот пример: <DOC> <TEXT>it's the content P&G</TEXT>.
Я разбираю файл XML, который имеет между определенными тегами текст, который я не хочу разбирать и, возможно, даже сломал теги. Как выбрать, чтобы не разбирать этот текст, используя один из.
В этой статье мы собираемся обсудить, как анализировать XML на языке программирования C ++. Мы увидим несколько рабочих примеров, чтобы понять механизм синтаксического анализа XML в C ++.
Что такое XML?
XML — это язык разметки, который в основном используется для хранения и передачи данных в организованном порядке. XML означает расширяемый язык разметки. Он очень похож на HTML. XML полностью ориентирован на хранение и передачу данных, тогда как HTML используется для отображения данных в браузере.
Пример XML-файла / XML-синтаксиса
Вот пример XML-файла:
Разбор библиотек в C ++:
Существуют различные библиотеки для анализа XML-данных на большинстве языков программирования высокого уровня. C ++ не исключение. Вот самые популярные библиотеки C ++ для анализа XML-данных:
Как следует из названия, RapidXML в основном ориентирован на скорость и представляет собой библиотеку синтаксического анализа в стиле DOM. PugiXML поддерживает преобразование Unicode. Вы можете использовать PugiXML, если хотите преобразовать документ UTF-16 в UTF-8. TinyXML — это минимальная версия для анализа XML-данных, которая не такая быстрая по сравнению с двумя предыдущими. Если вы хотите просто выполнить свою работу и не заботитесь о скорости, вы можете выбрать TinyXML.
Примеры
Теперь у нас есть базовое понимание XML и библиотек синтаксического анализа XML в C ++. Давайте теперь рассмотрим пару примеров для синтаксического анализа XML-файла на C ++:
- Пример-1: синтаксический анализ XML в C ++ с использованием RapidXML
- Пример-2: синтаксический анализ XML в C ++ с использованием PugiXML
- Пример-3: синтаксический анализ XML в C ++ с использованием TinyXML
В каждом из этих примеров мы будем использовать соответствующие библиотеки для анализа образца XML-файла.
Пример-1: синтаксический анализ XML в C ++ с использованием RapidXML
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки RapidXML на C ++. Вот исходный XML-файл (sample.xml):
Наша цель здесь — проанализировать указанный выше XML-файл с помощью C ++. Вот программа на C ++ для анализа XML-данных с помощью RapidXML. Вы можете скачать библиотеку RapidXML отсюда.
Пример-2: синтаксический анализ XML в C ++ с использованием PugiXML
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки PugiXML на C ++. Вот входной XML-файл (sample.xml):
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки pugixml на C ++. Вы можете скачать библиотеку PugiXML отсюда.
Пример-3: синтаксический анализ XML в C ++ с использованием TinyXML
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки TinyXML на C ++. Вот входной XML-файл (sample.xml):
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки TinyXML на C ++. Вы можете скачать библиотеку TinyXML отсюда.
Заключение
В этой статье мы кратко обсудили XML и рассмотрели три различных примера синтаксического анализа XML в C ++. TinyXML — это минималистичная библиотека для анализа XML-данных. Большинство программистов в основном используют RapidXML или PugiXML для анализа XML-данных.
Зачем нужен XML при парсинге? Иногда бывает так, что сайт, который вам нужно спарсить, имеет API, с помощью которого можно получить желаемое, особо не напрягаясь. Поэтому сразу совет - перед тем, как парсить сайт, проверьте, нету ли у него API.
Что такое API? Это набор функций, с помощью которых вы можете слать запрос этому сайту и получать нужный ответ. Вот этот ответ чаще всего приходит в формате XML. Поэтому давайте приступим к его изучению.
Работа с XML в PHP
Пусть у вас есть XML. Он может быть в строке, либо хранится в файле или отдаваться по запросу к определенному URL.
Пусть XML хранится в строке. В этом случае из этой строки нужно создать объект с помощью new SimpleXMLElement:
Сейчас у нас в переменной $xml хранится объект с разобранным XML. Обращаясь к свойствам этого объекта можно получать доступ с содержимому тегов XML. Как именно - разберем чуть ниже.
Если же XML хранится в файле или отдается по обращению к URL (что чаще всего и бывает), то следует использовать функцию simplexml_load_file, которая делает тот же объект $xml:
Приемы работы
В примерах ниже наш XML хранится в файле или по URL.
Пусть дан следующий XML:
Давайте получим имя, возраст и зарплату работника:
Как вы видите, у объекта $xml есть свойства, соответствующие тегам.
Вы может обратили внимание, что тег <worker> нигде не фигурирует при обращении. Это потому, что он корневой тег. Можно переименовать его, например, на <root> - и ничего не поменяется:
Корневой тег в XML может быть только один, так же, как и тег <html> в обычном HTML.
Давайте чуть модифицируем наш XML:
В этом случае у нас получится цепочка обращений:
Работа с атрибутами
Пусть некоторые данные хранятся в атрибутах:
Теги с дефисами
В XML разрешены теги (и атрибуты) с дефисом. В этом случае обращение к таким тегам происходит так:
Перебор циклом
Пусть теперь у нас не один работник, а несколько. В этом случае мы можем перебрать наш объект с помощью цикла foreach:
Из объекта в нормальный массив
Если вам неудобно работать с объектом, вы можете преобразовать его в нормальный массив PHP с помощью следующего хитрого приема:
Больше информации
Парсинг на основе sitemap.xml
Зачастую на сайте есть файл sitemap.xml. В этом файле хранятся ссылки на все страницы сайта для удобства индексации их поисковыми системами (индексация - это по сути и есть парсинг сайта яндексом и гуглом).
В общем-то нас мало должно волновать, зачем нужен этот файл, главное, что если он есть - можно не лазить по страницам сайта какими-либо хитрыми методами, а просто воспользоваться этим файлом.
Если sitemap есть - то в нем содежатся ссылки на все страницы сайта в формате XML. Спокойно забираете этот XML, парсите его, отделяете ссылки на нужные вам страницы любым удобным вам способом (например, анализом URL, который был описан в методе паука).
В итоге вы получаете список ссылок для парсинга, остается только зайти на них и спарсить нужным вам контент.
ОТВЕТЫ
Ответ 1
Ответ 2
Вот несколько примеров:
Кроме того, существует несколько других методов для работы. Например, здесь. И я думаю, что нет лучшего способа сделать это; вам всегда нужно выбирать его самостоятельно, что наиболее подходит вам.
Ответ 3
Используйте хороший XSD Schema, чтобы создать набор классов с xsd.exe и используйте XmlSerializer , чтобы создать дерево объектов из вашего XML и наоборот. Если у вас мало ограничений на вашу модель, вы даже можете попытаться создать прямое сопоставление между вами модельными классами и XML с атрибутами Xml *.
Совет по производительности: Построение XmlSerializer является дорогостоящим. Сохраните ссылку на свой экземпляр XmlSerializer , если вы собираетесь анализировать/записывать несколько файлов XML.
Ответ 4
Если вы обрабатываете большой объем данных (много мегабайт), вы хотите использовать XmlReader для потоковой обработки XML файла.
Что-нибудь еще ( XPathNavigator , XElement , XmlDocument и даже XmlSerializer , если вы сохраняете полный сгенерированный графический объект) приведет к использованию большой памяти, а также очень медленное время загрузки.
Конечно, если вам все же нужны все данные в памяти, у вас может не быть выбора.
Ответ 5
Обычно XPath упрощает чтение XML, что вы ищите.
Ответ 6
Если вам нужны XPath , попробуйте XPathNavigator . Если вам нужен весь документ в памяти, попробуйте XmlDocument .
Ответ 7
Я не уверен, существует ли "лучшая практика для синтаксического анализа XML". Существует множество технологий, подходящих для разных ситуаций. Какой способ использовать зависит от конкретного сценария.
Вы можете пойти с LINQ в XML, XmlReader , XPathNavigator или даже регулярные выражения. Если вы уточните свои потребности, я могу попытаться дать некоторые предложения.
Ответ 8
Мне недавно потребовалось работать над приложением, которое включало анализ XML-документа, и я согласен с Джоном Галлоуэем в том, что подход на основе LINQ to XML, на мой взгляд, лучший. Тем не менее, мне пришлось немного проработать, чтобы найти полезные примеры, поэтому без лишних слов, вот несколько!
Любые комментарии приветствуются, поскольку этот код работает, но может быть не идеальным, и я хотел бы узнать больше о разборе XML для этого проекта!
С помощью этих функций я смог разобрать любой элемент и любой атрибут из файла XML без проблем!
Ответ 9
В дополнение вы можете использовать селектор XPath следующим образом (простой способ выбора определенных узлов):
Ответ 10
Вы можете проанализировать XML, используя эту библиотеку System.Xml.Linq . Ниже приведен пример кода, который я использовал для анализа XML файла
Ответ 11
Вы можете использовать ExtendedXmlSerializer для сериализации и десериализации.
Переустановленное Вы можете установить ExtendedXmlSerializer из nuget или выполнить следующую команду:
Сериализация:
Десериализация
- Не поддерживает сериализацию класса с круговой ссылкой или классом с интерфейсом,
- Не поддерживает словари,
- Нет механизма для чтения старой версии XML,
- Если вы хотите создать собственный сериализатор, ваш класс должен наследовать от IXmlSerializable. Это означает, что ваш класс не будет классом POCO,
- Не поддерживает IoC.
ExtendedXmlSerializer может это сделать и многое другое.
Ответ 12
lxml - библиотека на основе python для анализа XML для пользователей python
Ответ 13
Вы можете использовать XmlDocument и для манипулирования или получения данных из атрибутов, которые вы можете использовать для классов Linq для XML.
Читайте также: