Разбор HTML атрибута "style" с использованием Java - PullRequest
8 голосов
/ 23 ноября 2010

У меня есть HTML-код, проанализированный как org.w3c.dom.Document.Мне нужно проверить все атрибуты тега style, проанализировать их, изменить некоторые свойства CSS и вернуть определение измененного стиля в атрибут.

Существуют ли стандартные способы анализа атрибута style?Как я могу использовать классы и интерфейсы из пакета org.w3c.dom.css?

Мне нужно решение Java.

Ответы [ 3 ]

2 голосов
/ 25 сентября 2015

Если вам нужен способ сделать это без каких-либо зависимостей, вы можете использовать классы пакетов javax.swing.text.html, чтобы получить большую часть пути:

import javax.swing.text.html.*;

StyleSheet styleSheet = new StyleSheet()
AttributeSet dec = ss.getDeclaration("margin:2px;padding:3px");
Object marginLeft = dec.getAttribute(CSS.Attribute.MARGIN_LEFT);
String marginLeftString = marginLeft.toString(); // "2px"

Это возвращает StyleSheet.CssValue, чток сожалению не публично.Таким образом, необходимо преобразовать его в строку.Кроме того, он не будет обрабатывать em единиц.Хотя это довольно умно в отношении различных стилей.Не идеально, но избегает зависимостей.

1 голос
/ 23 ноября 2010

Во-первых, я бы проверил классы в пакетах javax.xml.Пакет javax.xml.parsers содержит парсеры для двух стилей синтаксического анализа: SAXParser и DocumentBuilder.Похоже, вы хотите, чтобы DocumentBuilder создал DOM.Вы можете либо пройти DOM вручную (медленно и мучительно), либо использовать стандарт XPath для поиска элементов в DOM.Поддержка Java для этого есть в javax.xml.xpath.

XPathExpression xpath = XPath.compile("//@style");
Object results = xpath.evaluate(dom, XPathConstants.NODESET);

Вы несете ответственность за преобразование результатов в NodeList и правильную итерацию, но это самый прямой способ получить то, что вы хотите.Обратитесь к API DOM Java для получения дополнительной информации о чтении и изменении значений.

Я не верю, что есть какая-либо поддержка синтаксического анализатора CSS, встроенного в Java, но вы можете посмотреть на следующие проекты:

Это может помочь вам в достижении ваших целей.ПРИМЕЧАНИЕ: CSS-анализатор Batik включен в более крупный проект Apache Batik: http://xmlgraphics.apache.org/batik/index.html, который может иметь больше, чем нужно, но это корпоративная лицензия.

0 голосов
/ 23 ноября 2010

Я не уверен, что полностью понимаю ваши требования, но в основном вам придется:

  1. Прочитайте таблицы стилей и извлеките правила CSS.
  2. Прочитайте HTML-страницу и найдите атрибуты.
  3. Замените новые свойства CSS на старые свойства CSS.
  4. Напишите HTML-страницу (ы).

Похоже, вы использовали бы интерфейс CSSStyleSheet для извлечения правил CSS из таблицы (таблиц).

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