Перейти к содержимому

Как распарсить xml js

  • автор:

Как распарсить Xml в Json node js (Vue)

Я не писал на node js и Vue. В основном пишу на C# но сейчас нужно сделать небольшую утелиту на Vue и Electron, нужно получить данные xml из файла и распарсить их в Json. Казалось бы лёгкая задачка, ) но нет! Перепробовал кучу вариантов но не чего не помогает.

const parser = require('p3x-xml2json'); const xml = 'bar'; console.log("input -> %s", xml) export class parserXmlToJson < getXml2()< // xml to json var json = parser.toJson(xml); console.log("to json ->%s", json); // json to xml var xml = parser.toXml(json); console.log("back to xml -> %s", xml) > > 
   

пока по нажатию на кнопку в консоль должен вывестись распарсиный результат xml При запуске выходит ошибка.

Uncaught TypeError: Cannot read property 'modules' of undefined at Object.eval (bindings.js?dfc1:29) at eval (bindings.js:223) at Object../node_modules/bindings/bindings.js (chunk-vendors.js:603) at __webpack_require__ (app.js:854) at fn (app.js:151) at eval (node-expat.js?8891:4) at Object../node_modules/node-expat/lib/node-expat.js (chunk-vendors.js:1787) at __webpack_require__ (app.js:854) at fn (app.js:151) at eval (xml2json.js?0821:1) 

не понятно что не так. Если закоментить код из класса parserXmlToJson и parser.getXml2(); Ошибок нет. И как можно получить данные xml через файл, то есть как указать директорию где брать файл? Который потом можно засунуть в fs и распарсить. Буду рад любой помощи!

Прямая и обратная обработка XML

Иногда возникает необходимость в обработке XML и в последующей конвертации в древо DOM. Или наоборот, необходимо перевести древо DOM в XML. В этой статье рассмотрим объекты платформы web для обработки XML.

Сериализует деревья DOM, преобразуя их в строки, содержащие XML.

Создаёт дерево DOM, анализируя строку, содержащую XML, возвращая XMLDocument или Document в зависимости от входящих данных.

Загружает контент из URL-адреса; Содержимое XML возвращается как объект XML Document с деревом DOM, построенным из самого XML.

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

Создание XML-документа

Использование одного из следующих подходов для создания XML-документа (который является экземпляром Document .

Parsing строк в дерево DOM

В этом примере фрагмент XML в строке преобразуется в дерево DOM с помощью DOMParser :

var sMyString = 'hey!'; var oParser = new DOMParser(); var oDOM = oParser.parseFromString(sMyString, "application/xml"); // print the name of the root element or error message console.log( oDOM.documentElement.nodeName == "parsererror" ? "error while parsing" : oDOM.documentElement.nodeName, ); 

Parsing URL-addressable ресурсов в дерево DOM

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

Вот пример кода, который считывает и анализирует XML-файл с URL-адресом в дереве DOM:

var xhr = new XMLHttpRequest(); xhr.onload = function ()  dump(xhr.responseXML.documentElement.nodeName); >; xhr.onerror = function ()  dump("Error while getting XML."); >; xhr.open("GET", "example.xml"); xhr.responseType = "document"; xhr.send(); 

Значение, возвращаемое в поле responseXML объекта xhr, является Document , созданным путём синтаксического анализа XML.

Если документ представляет собой HTML, приведённый выше код вернёт Document . Если документ XML, результирующий объект на самом деле является XMLDocument . Эти два типа по существу одинаковы; разница в основном историческая, хотя дифференциация имеет также некоторые практические преимущества.

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

Сериализация XML-документа

Имея Document , вы можете сериализовать дерево DOM документа обратно в XML с помощью метода XMLSerializer.serializeToString () .

Используйте следующие подходы для сериализации содержимого XML-документа, созданного в предыдущем разделе.

Serializing DOM trees to strings

Сначала создайте дерево DOM, как описано в разделе Как создать дерево DOM. В качестве альтернативы используйте дерево DOM, полученное из XMLHttpRequest .

Чтобы сериализовать документ дерева DOM в текст XML, вызовите XMLSerializer.serializeToString () :

var oSerializer = new XMLSerializer(); var sXML = oSerializer.serializeToString(doc); 

Serializing HTML documents

Если у вас есть модель DOM в виде HTML-документа, вы можете сериализовать её с помощью serializeToString (), но есть более простой вариант: просто используйте свойство Element.innerHTML (если вам нужны только потомки указанный узел) или свойство Element.outerHTML , если вам нужен узел и все его потомки.

var docHTML = document.documentElement.innerHTML; 

В результате docHTML представляет собой DOMString , содержащий HTML-код содержимого документа; то есть содержимое элемента .

Вы можете получить HTML, соответствующий и его потомкам, с помощью этого кода:

var docHTML = document.documentElement.outerHTML; 

See also

  • XPath
  • XMLHttpRequest
  • Document , XMLDocument , and HTMLDocument

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 10 дек. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Yii Framework

Теоретически нашла ответ : Загружаете хмл, как обычный файл на сервер, получаете его содержание, берете нужные данные из хмл с помощью SimpleXML, расталкиваете их куда хотите по какой хотите логике.
Но практически как?

masson Сообщения: 545 Зарегистрирован: 2012.07.03, 15:59

Re: Как распарсить XML

Сообщение masson » 2019.07.18, 19:02

svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.18, 19:16

Читала — не поняла.

$xmlString=file_get_contents(Yii::getAlias('@app/web/') . 'categories.xml'); $xml = simplexml_load_string($xmlString,'SimpleXMLElement', LIBXML_NOCDATA); $xml = new \SimpleXMLElement('categories.xml'); echo $xml->categories->item['Id']; echo "
"; echo $xml->categories->item['name']; or. foreach ($xml->categories->item as $element) < foreach($element as $key =>$val) < echo ": "; > >

svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.18, 19:17

КАк в SimpleXMLElement попадает xml файл и в каком виде попадает?
svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.18, 19:21

Так попробовала — ошибка

DOMDocument::loadXML(): Start tag expected, '<' not found in Entity, line: 1
$dom = new DOMDocument; $dom->loadXML('categories.xml'); if (!$dom) < echo 'Ошибка при разборе документа'; exit; >$books = simplexml_import_dom($dom); echo $books->categories->item->name;

Loveorigami Сообщения: 977 Зарегистрирован: 2014.08.27, 21:54

Re: Как распарсить XML

kukuruku Сообщения: 1318 Зарегистрирован: 2011.02.14, 11:36

Re: Как распарсить XML

Сообщение kukuruku » 2019.07.19, 06:28

leonenco Сообщения: 155 Зарегистрирован: 2017.01.30, 22:42

Re: Как распарсить XML

Сообщение leonenco » 2019.07.19, 07:39

Попробуй так создай метод и как параметер передай свой SimpleXMLElement:

protected function parseXml(SimpleXMLElement $xmlObject)

На выходе получвешь обьект.
svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.19, 10:37

Так работает, спасибо, Loveorigami

$categories = simplexml_load_file('categories.xml'); for($i=0; $iitem[$i]->id> => item[$i]->name> "; echo "
"; >

Loveorigami Сообщения: 977 Зарегистрирован: 2014.08.27, 21:54

Re: Как распарсить XML

проще, через foreach

 $categories = simplexml_load_file('categories.xml'); foreach($categories->item as $item) < echo $item->id . ' - '. $item->name; echo "
"; >

svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.19, 12:42

Не могу найти ошибку
Таблица categories в БД с первичным ключом id_pk и полями для парсинга id(text) и name(text)

Attempt to assign property of non-object $categories_xml = simplexml_load_file('categories.xml'); for($i=0; $iall(); if (!isset($categories->id))< $categories->id = $categories_xml->item[$i]->id; //здесь ошибка $categories->name = $categories_xml->item[$i]->name; $categories->save(); //> >

Loveorigami Сообщения: 977 Зарегистрирован: 2014.08.27, 21:54

Re: Как распарсить XML

Тут у вас массив
$categories = Categories::find()->all()

а вы обращаетесь, как к объекту
$categories->id

Loveorigami Сообщения: 977 Зарегистрирован: 2014.08.27, 21:54

Re: Как распарсить XML

$categories = simplexml_load_file('categories.xml'); foreach($categories->item as $item) < $model = Categories::find()->byId(item->id)->one(); if($model)< $model->name = $item->name; $model->save(); > >

svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.19, 15:53

Спасибо за помощь. Проблема в другом ЕЩЕ оказся была. надо было четко прописать тип (string)

foreach($categories->item as $item) < $model = new Categories(); $k1= $item->id; $k2 = $item->name; echo $k1."-".$k2; echo "
"; $model->id =(string)$k1; $model->name = (string)$k2; $model->save(); >

svil Сообщения: 563 Зарегистрирован: 2018.02.12, 22:41

Re: Как распарсить XML

Сообщение svil » 2019.07.22, 23:23

Оказывается надо было закодировать и потом раскодировать json — и всё
Контроллер

class ProductsarController extends Controller < public function actionIndex() < //парсинг $xml_string = "categories.xml"; $xml = simplexml_load_file($xml_string); $json = json_encode($xml); // туть $array = json_decode($json,TRUE); // и туть $dataProvider= new ArrayDataProvider([ 'allModels' =>$array['item'], 'sort' => [ 'attributes' => ['id', 'name'], ], ]); //конец парсинга return $this->render('index', [ 'dataProvider' => $dataProvider, 'array' => $array, ]); > 
use yii\grid\GridView; echo \yii\grid\GridView::widget( [ 'dataProvider' => $dataProvider, 'columns' => [ [ 'class' => \yii\grid\SerialColumn::class, ], 'id', 'name', ], ] ); debug($array['item']);

Теперь бы еще поиск и подстановку поля(вместо id_name другое поле по ключу из другого xml файла настроить, где name).

Как распарсить из xml файла данные в javascript?

Здравствуйте. Встала задача заполнить поля ввода формы из подгружаемого в input xml файла (или json возможно). То есть файл будет не с сервера, а локальный.
Вопрос с том, можно ли его прочитать а потом из xml формата вытянуть все в объект js, после чего уже вставить в поля формы?
Если да, то буду благодарен за инфу о последовательности действий и ньюансы, с которыми можно столкнуться при реализации. Спасибо

  • Вопрос задан более трёх лет назад
  • 6888 просмотров

Комментировать
Решения вопроса 1

dimovich85

Dima Polos @dimovich85 Куратор тега JavaScript
https://u-academy.net/

Для того, чтобы с локалки прочитать файл можно использовать
Для чтения самого файла можно изучить вот такой сниппет и переделать под себя, вместо того, чтобы в innerHTML присваивать — просто запомнить в переменную, например fileContent.

Для парсинга XML: здесь
Для JSON: JSON.parse( fileContent );

Ответ написан более трёх лет назад
Нравится 2 5 комментариев

svisch

Shurik @svisch Автор вопроса

Спасибо. То, что нужно. Но пытаюсь сделать у себя для теста этот пример — почему то выдает ошибку:
test.html:15 Uncaught TypeError: Cannot read property ‘addEventListener’ of null

dimovich85

Dima Polos @dimovich85 Куратор тега JavaScript
svisch, наверное потому что скопировали и не разобрались)

svisch

Shurik @svisch Автор вопроса

Dima Polos, наверное))))
Ошибку выше уже исправил, но ничего не выводится у меня) Ладно, посижу поразбираюсь. Спасибо)

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

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