Оберните тег вокруг простого текста HTML
У меня есть эта структура в моем HTML-документе:
<p>
"<em>You</em> began the evening well, Charlotte," said Mrs. Bennet with civil self–command to Miss Lucas. "<em>You</em> were Mr. Bingley's first choice."
</p>
Но мне нужно, чтобы мой "простой текст" был обернут в теги, чтобы иметь возможность обрабатывать его:)
<p>
<text>"</text>
<em>You</em>
<text> began the evening well, Charlotte," said Mrs. Bennet with civil self–command to Miss Lucas. "</text>
<em>You</em>
<text> were Mr. Bingley's first choice."</text>
</p>
Есть идеи как это сделать? Я посмотрел на tagoup и jsoup, но мне не кажется, что это легко решить. Может быть, использовать какое-то необычное регулярное выражение.
Спасибо
1 ответ
Решение
Вот предложение:
public static Node toTextElement(String str) {
Element e = new Element(Tag.valueOf("text"), "");
e.appendText(str);
return e;
}
public static void replaceTextNodes(Node root) {
if (root instanceof TextNode)
root.replaceWith(toTextElement(((TextNode) root).text()));
else
for (Node child : root.childNodes())
replaceTextNodes(child);
}
Тестовый код:
String html = "<p>\"<em>You</em> began the evening well, Charlotte,\" " +
"said Mrs. Bennet with civil self–command to Miss Lucas." +
" \"<em>You</em> were Mr. Bingley's first choice.\"</p>";
Document doc = Jsoup.parse(html);
for (Node n : doc.body().children())
replaceTextNodes(n);
System.out.println(doc);
Выход:
<html>
<head></head>
<body>
<p>
<text>
"
</text><em>
<text>
You
</text></em>
<text>
began the evening well, Charlotte," said Mrs. Bennet with civil self–command to Miss Lucas. "
</text><em>
<text>
You
</text></em>
<text>
were Mr. Bingley's first choice."
</text></p>
</body>
</html>