2015-11-10 3 views
3

Учитывая произвольную строку, как определить, содержит ли она XML, и проанализировать ее в приложении node.js?Как определить, содержит ли строка XML в node.js?

Ex.

var s = 'hello world <hello type="greeting">world</hello>';

Я попытался nodexml и xml2js, но оба они требуют всю строку, чтобы быть XML.

Редактировать для ясности:

В идеале хотелось бы что-то вроде:

var s = 'hello world <hello type="greeting">world</hello>'; 
var parsed = parse(s); 
console.log(parsed); 
{ 
    originalString: 'hello world <hello type="greeting">world</hello>', 
    textOnly: 'hello world ', 
    js: { 
    hello: { 
     type: 'greeting' 
     '@text': 'world' 
    } 
    } 
} 
+0

'<Привет типа = "приветствие" > мир 'может быть HTML. Недопустимый HTML, потому что тэг 'hello' не существует (и, возможно, теперь я верю в HTML5), но это может быть HTML. Я предполагаю, что лучший способ - иметь какой-то родительский узел, который специально означает, что контент является XML. В противном случае невозможно отличить XML и HTML, и это всего лишь пример. – Vadorequest

+0

Я не очень беспокоюсь о том, чтобы отличать XML от HTML. Меня больше интересует разбор * ML из строки. См. Правки. – ggutenberg

+0

Тогда я думаю, что ответ @lostsource стоит попробовать :) – Vadorequest

ответ

0

Вы можете попробовать загружаете строку, используя node-htmlparser

npm install htmlparser 

С момента своего парсера прощает неправильный и вы должны иметь возможность загружать любые данные, а затем проверять определенный тег HTML, чтобы определить, возвратили ли анализируемые данные DOM.

0

Моя рекомендация - использовать htmlparser2. Demo

npm install htmlparser2 

Прощающий HTML/XML/RSS парсер. Парсер может обрабатывать потоки и предоставляет интерфейс обратного вызова. Это вилка модуля htmlparser. Основное различие заключается в том, что он предназначен для использования только с узлом (он работает на других платформах с использованием браузера).

протестирован со следующими данными:

var input = "Hello This is Bikram"+ 
    "<hello type="greeting">world</hello>"+ 
    "<head>"+ 
    "<meta charset="utf8"/>"+ 
    "<title>Page Title</title>"+ 
    "</head>"+ 
    "<body>"+ 
    "<a href="https://github.com/ForbesLindesay">"+ 
     "<img src="/static/forkme.png" alt="Fork me on GitHub">"+ 
    "</a>"+ 
"</body>"+ 
    "Sample answer for stackoverflow!!!" 

Выхода: отсылает demo link для вывода

Измерение эффективности:

gumbo-parser : 34.9208 ms/file ± 21.4238 
html-parser : 24.8224 ms/file ± 15.8703 
html5   : 419.597 ms/file ± 264.265 
htmlparser  : 60.0722 ms/file ± 384.844 
htmlparser2-dom: 12.0749 ms/file ± 6.49474 
htmlparser2 : 7.49130 ms/file ± 5.74368 
hubbub   : 30.4980 ms/file ± 16.4682 
libxmljs  : 14.1338 ms/file ± 18.6541 
parse5   : 22.0439 ms/file ± 15.3743 
sax   : 49.6513 ms/file ± 26.6032 
Смежные вопросы