Хранение значений HTML в XML - PullRequest
       0

Хранение значений HTML в XML

2 голосов
/ 26 декабря 2011

Попытка выяснить, как извлечь конкретную информацию (имя, описание, идентификатор и т. Д.) Из html-файла, оставив ненужную информацию и сохранив ее в xml-файле.

Я подумалпытаться использовать xslt, так как он может сделать xml to html ... но, похоже, он не работает наоборот.

Я, честно говоря, не знаю, на каком другом языке я должен попытаться это сделать.Я знаю основы Java и Javascript, но не уверен, сможет ли он это сделать. Я немного растерялся, когда начал.

Я открыт для любых советов / помощи.Я тоже хочу выучить новый язык, потому что я просто делаю это ради удовольствия.

Ответы [ 4 ]

3 голосов
/ 26 декабря 2011

Существует ряд библиотек Java для обработки ввода HTML, который не является правильно сформированным (согласно XML). В этих библиотеках также есть встроенные методы для запроса или манипулирования документом, но важно понимать, что после того, как вы проанализировали документ , обычно довольно легко обращаться с ним, как если бы он был XML в первую очередь. (используя стандартные интерфейсы Java XML). Другими словами, вам нужны только эти библиотеки для анализа искаженного ввода; другие утилиты, которые они предоставляют, в основном лишние.

Вот пример, который показывает синтаксический анализ HTML с использованием HTMLCleaner и последующее преобразование этого объекта в стандартный org.w3c.dom.Document:

TagNode tagNode = new HtmlCleaner().clean("<html><div><p>test");
DomSerializer ser = new DomSerializer(new CleanerProperties());
org.w3c.dom.Document doc = ser.createDOM(tagNode);

В Jsoup просто проанализируйте входные данные и сериализуйте их в строку:

String text = Jsoup.parse("<html><div><p>test").outerHtml();

И преобразовать эту строку в документ W3C, используя один из методов, описанных здесь:

Теперь вы можете использовать стандартные интерфейсы JAXP для преобразования этого документа:

TransformerFactory tFact = TransformerFactory.newInstance();
Transformer transformer = tFact.newTransformer();
Source source = new DOMSource(doc);
Result result = new StreamResult(System.out);
transformer.transform(source, result);

Примечание. Предоставьте некоторый источник XSLT для tFact.newTransformer(), чтобы сделать что-то более полезное, чем преобразование идентификаторов.

2 голосов
/ 26 декабря 2011

Я бы использовал HTMLAgilityPack или Крис Ловетт * SGMLReader .

Или просто HTML Tidy .

0 голосов
/ 26 декабря 2011
  • TagSoup
  • JSoup
  • Красивый суп
0 голосов
/ 26 декабря 2011

В идеале вы можете рассматривать ваш HTML как XML. Если вам повезет, это будет уже XHTML, и вы можете обработать его как HTML. Если нет, используйте что-то вроде http://nekohtml.sourceforge.net/ (балансировщик тегов HTML и т. Д.), Чтобы преобразовать HTML в нечто, совместимое с XML, чтобы вы могли использовать XSLT.

У меня есть конкретный пример и некоторые заметки о том, как это сделать, в моем личном блоге по адресу http://blogger.ziesemer.com/2008/03/scraping-suns-bug-database.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...