Articles of xmlreader

Как использовать XMLReader для анализа множественных, идентично названных атрибутов элемента / подэлемента XML

Я использую XMLReader и PHP для обработки XML-файла умеренного размера (6 МБ) и в основном разбиваю данные атрибута и вставляю его в свою собственную базу данных. Проблема в том, что каждый элемент имеет переменное количество подэлементов с одинаково названными атрибутами. Вот пример (это открытые данные о государственной вежливости govtrack.us): <?xml version="1.0" ?> <people> <person id='400001' […]

CData в simplexml открыт из XMLReader

У меня есть куча XML-файла, который я загружаю в свой скрипт с помощью XMLReader, создавая объект DOM и затем конвертируя в Simplexml. Проблема заключается в том, что один из файлов XML использует CDATA, который SIMPLEXML игнорирует и обычно использует SIMPLEXML_LOAD_FILE. Я бы добавил параметр LIBXML_NOCDATA, но поскольку я использую simplexml_import_dom, я не могу понять, как […]

Как обновить этот XML-файл с помощью PHP XML-ридера и писателя?

У меня есть следующий XML-файл Sitemap, который содержит список URL-адресов, которые должны быть отправлены для поисковых систем. Я взял этот пример кода из другого ответа SO. // Init XMLWriter $writer = new XMLWriter(); $writer->openURI(APPLICATION_PATH . '/sitemap.xml'); // document head $writer->startDocument('1.0', 'UTF-8'); $writer->setIndent(4); $writer->startElement('urlset'); $writer->writeAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); // Write something // this will write: <url><loc>some url here; […]

Проверка большого XML-файла ~ 400 МБ в PHP

У меня есть большой XML-файл (около 400 МБ), который мне нужно, чтобы он был хорошо сформирован, прежде чем я начну его обрабатывать. Первое, что я пробовал, было похоже на то, что было показано ниже, что здорово, поскольку я могу узнать, плохо ли сформирован XML и какие части XML являются «плохими», $doc = simplexml_load_string($xmlstr); if (!$doc) […]

Загружать только XPath-поиск в память XMLReader?

Могу ли я как-то это сделать? XMLReader вытягивает парсер, поэтому я ожидаю от него дать мне только данные, которые я ищу, но он загружает весь документ в память, а затем дает мне поиск из его памяти. Этот код: $url = $this->buildUrl($name,$params); $xml = ''; $reader = new XMLReader(); $reader->open($url); $pathXML = ''; $dom = new […]

XMLReader – как обрабатывать незадекларированное пространство имен

Я читаю большой файл размером ~ 300 Мб gzipped с XMLReader, который автоматически загружается на мой сервер (архаично, я знаю ..) Он неверен, т. Е. Имеет неопределенное пространство имен и вызывает ошибку ErrorException [Warning]: Ошибка пространства имен XMLReader :: read (): префикс пространства имен xsi для AttrName в NodeName не определен Каков наилучший способ справиться […]

Работа с лесом двоичных деревьев, хранящихся в большом XML-файле (PHP)

У меня есть массив вроде 'var1'=>1.05, 'var2'=>0.76,… и лес двоичных деревьев, хранящихся в XML-файле размером более 100 МБ. <Tree id="1"> <Node id="2"> <SimplePredicate field="var1" operator="lessOrEqual" value="1.41"/> <Node id="4"> <SimplePredicate field="var2" operator="lessOrEqual" value="1.43"/> ……. </Node> </Node> <Node id="3"> <SimplePredicate field="var1" operator="greaterThan" value="1.41"/> ……. </Node> </Tree> То, что я хотел бы сделать в PHP, – это каждое […]

XML с различным количеством дочерних узлов для каждого родительского узла

Поэтому у меня есть XML в следующем формате, который я читаю из файла test.xml, <XML> <Agent ID="ABC123"> <Property> <Code>XYZ</Code> <Name>Hotel 1</Name> </Property> <Property> <Code>237</Code> <Name>Hotel 2</Name> </Property> <Property> <Code>213</Code> <Name>Hotel 3</Name> </Property> </Agent> <Agent ID="DEF456"> <Property> <Code>333</Code> <Name>Hotel 4</Name> </Property> <Property> <Code>23423</Code> <Name>Hotel 5</Name> </Property> </Agent> <Agent ID="GHI789"> <Property> <Code>45345</Code> <Name>Hotel 6</Name> </Property> </Agent> </XML> […]

PHP XMLReader, получить версию и кодировку

В настоящее время я переписываю класс PHP, который пытался разбить XML-файл на более мелкие куски, чтобы использовать XMLReader и XMLWriter вместо текущей базовой файловой системы и регулярного подхода. Однако я не могу понять, как получить версию, кодировку и автономные флаги из преамбулы XML. Начало моего тестового XML-файла выглядит следующим образом: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE fakedoctype […]

PHP XMLReader читает, редактирует узел, пишет XMLWriter

У меня есть XML-файл, который очень велик (миллионы записей). Из-за ограничений скорости и памяти я планирую использовать XMLReader / XMLWriter . Мне нужно прочитать файл, получить одну запись, изменить ее атрибут и, наконец, сохранить XML снова. Для тестирования я создал XML-файл и записал в него несколько записей, используя следующие строки: $doc = new XMLWriter(); $doc->openURI($xmlFile); […]