Автор Гілка: Чим розібрати XML  (Прочитано 5173 раз)

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Чим розібрати XML
« : 2012-07-12 19:35:05 »
У Вінді і б це робив javascript'ом, а як бути тут. Бажано щось нескладне для встановлення. Знаю С++, Ерланґ, ДжаваСкрипт...

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3744
  • Карма: +9/-0
  • Програміст
Re: Чим розібрати XML
« Відповідей #1 : 2012-07-12 19:40:27 »
Сучасний яваскрипт має вбудований парсер (E4X, EcmaScipt fo XML).

На Сi можна libxml2 використати.

А що за проблема?
[Fedora Linux]

Відсутній peinguin

  • Літератор
  • ******
  • дописів: 1418
  • Карма: +0/-0
Re: Чим розібрати XML
« Відповідей #2 : 2012-07-13 10:27:42 »
Знаю С++, Ерланґ, ДжаваСкрипт...
Не сприйміть як грубість. Але якби ви знали хоч одну з цих мов - такого питання не виникло б.
https://www.google.com/search?q=erlang+xml+parser&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:unofficial&client=iceweasel-a

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Чим розібрати XML
« Відповідей #3 : 2012-07-13 14:26:47 »
Не сприйміть як грубість.
Так і сприйняв, та це нічого. А те що на цю штуку немає прикладів використання і через це я не можу побороти помилку з енкодінгом, то оце вже погано.

А треба ось що. Маю файл 2Мб, Ворд з таблицею в якій інфа про пам'ятки. Я його зберіг як хмл і думав так і парсити. Мені треба загнати його в шаблони вікіпедійні. Я так подумав, адже джскрипт присутній в броузерах, отже так я і спробую.
« Змінено: 2012-07-13 14:33:31 від Yola »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Чим розібрати XML
« Відповідей #4 : 2012-07-13 15:32:37 »
Отакий цей хмл
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>

там елементи типу <w:tr> </pkg:part>

як мені башем це позамінювати на підкреслення абощо або як з цими просторами працювати

файл 4мб
« Змінено: 2012-07-13 15:34:28 від Yola »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Чим розібрати XML
« Відповідей #5 : 2012-07-13 15:35:06 »
якщо це складний скрипт, то нафік, зроблю на спп

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3628
  • Карма: +2/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Re: Чим розібрати XML
« Відповідей #6 : 2012-07-14 22:19:38 »
Я б написав XSL-шаблон і перетворював би за його допомогою, оскільки синтаксис XSL простий і там важче заплутатися.

Також можна щось швиденьке написати на Python (просто набір формальних виразів для компонентів з наступною заміною на форматування вікі).
Denounce the demagogues
King diamonds to discard
Deploy the dialogue
Your word against the law

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Чим розібрати XML
« Відповідей #7 : 2012-07-17 16:11:50 »
не можу змусити такий скрипт працювати, видає лише перший елемент:
var xmlDoc;
window.onload = function() {
      xmlDoc=document.implementation.createDocument("","doc",null);
      xmlDoc.load("data.xml");
      xmlDoc.onload=parse_xml;
}

function traverse(tree) {
            document.write('--------------------</br>');
      if(tree.hasChildNodes()) {
            document.write('<ul><li>');
            document.write('<b>'+tree.tagName+' : </b>');
            var nodes=tree.childNodes.length;
            for(var i=0; i<tree.childNodes.length; i++)
                  traverse(tree.childNodes(i));
            document.write('</li></ul>');
      }
      else
            document.write(tree.text);
}

function parse_xml()
{
      var trs = xmlDoc.getElementsByTagName('Quotes');

      traverse(xmlDoc.documentElement);
}
може під Лінуксом інакше треба відкривати xml файли?

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Чим розібрати XML
« Відповідей #8 : 2012-07-18 10:58:25 »
Я б написав XSL-шаблон і перетворював би за його допомогою, оскільки синтаксис XSL простий і там важче заплутатися.

Great thanks, man. XSL - rulez. Щось воно мені таки видало, тільки проблема з кодуванням.
це в xml:
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
це  в xsl:
<?xml version="1.0" encoding="windows-1251"?>

а в форматованому документі я отримую абра-кадабру: ЅРЅСЏ Харківського РћР’Рљ в„–В 532 РІС–Рґ 21.12. 1987В СЂ.)1799МогилаМ.Рњ.Геращенка, Героя РадяРЛише ASCII<128 - правильно. Воно видає в UTF-8 і не реагує на спробу змінити через Вигляд - Кодування на windows-1251.

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Чим розібрати XML
« Відповідей #9 : 2012-07-18 12:36:21 »
Проблема з кодуванням розв'язана. Треба щоб було правильне кодування в файлі-джерелі, а також в xsl вказати кодування для виходового файлу
<xsl:output method="html" version="4.0" encoding="windows-1251" indent="yes"/>

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3744
  • Карма: +9/-0
  • Програміст
Re: Чим розібрати XML
« Відповідей #10 : 2012-07-21 08:16:04 »
Для XSLT, вихідне кодування вказується окремо. Див. http://www.w3schools.com/xsl/el_output.asp
[Fedora Linux]

Відсутній tarasian666

  • Графоман
  • ****
  • дописів: 464
  • Карма: +0/-0
  • нульовий біт це також біт
Re: Чим розібрати XML
« Відповідей #11 : 2012-09-21 10:56:53 »
не можу змусити такий скрипт працювати, видає лише перший елемент:
var xmlDoc;
window.onload = function() {
      xmlDoc=document.implementation.createDocument("","doc",null);
      xmlDoc.load("data.xml");
      xmlDoc.onload=parse_xml;
}

function traverse(tree) {
            document.write('--------------------</br>');
      if(tree.hasChildNodes()) {
            document.write('<ul><li>');
            document.write('<b>'+tree.tagName+' : </b>');
            var nodes=tree.childNodes.length;
            for(var i=0; i<tree.childNodes.length; i++)
                  traverse(tree.childNodes(i));
            document.write('</li></ul>');
      }
      else
            document.write(tree.text);
}

function parse_xml()
{
      var trs = xmlDoc.getElementsByTagName('Quotes');

      traverse(xmlDoc.documentElement);
}
може під Лінуксом інакше треба відкривати xml файли?
допомагало не for(var i=0; i<tree.childNodes.length; i++) а for(var i  in tree.childNodes) і не потрібно визначати довжину масиву
Kernel alive - куди поділи цю "фразу" в новому ядрі?