我正在尝试转换html文本以生成单词表。它工作得很好,并且除字符样式外,创建的单词文件是正确的。
这是我第一次尝试使用Apache POI。
到目前为止,我已经能够从文本段落中检测到换行(
)标记(请参见下面的代码)。但是我还要检查其他一些标签,例如,
例如:
这是我的文字,,现在以斜体,但也以粗体显示,具体取决于其重要性
我想我应该解析文本,并对每个部分应用不同的运行,但是我不知道该怎么做。
private static XWPFParagraph getTableParagraph(XWPFTableCell cell, String text)
{
int fontsize= 11;
XWPFParagraph paragraph = cell.addParagraph();
cell.removeParagraph(0);
paragraph.setSpacingAfterLines(0);
paragraph.setSpacingAfter(0);
XWPFRun myRun1 = paragraph.createRun();
if (text==null) text="";
else
{
while (true)
{
int x = text.indexOf("<br>");
if (x <0) break;
String work = text.substring(0,x );
text= text.substring(x+4);
myRun1.setText(work);
myRun1.addBreak();
}
}
myRun1.setText(text);
myRun1.setFontSize(fontsize);
return paragraph;
}
答案 0 :(得分:2)
在转换HTML文本时,切勿仅使用字符串方法继续进行HTML
。 XML
和HTML
是标记语言。它们的内容是标记,而不仅仅是纯文本。需要遍历标记以获取所有单个节点及其含义。这种遍历过程绝非易事,因此有特殊的库可供使用。这些库的深处也需要使用字符串方法,但是将它们包装到用于遍历标记的有用方法中。
例如,可以使用HTML
jsoup进行遍历。特别是NodeTraversor使用NodeVisitor对于遍历HTML
很有用。
我的示例创建了一个实现ParagraphNodeVisitor
的{{1}}。此接口请求方法NodeVisitor
在每次public void head(Node node, int depth)
在节点头时调用,而NodeTraversor
在每次public void tail(Node node, int depth)
在节点尾部时调用。在那些方法中,可以实现用于处理单个节点的过程。在我们的案例中,该过程的主要部分是是否需要新的NodeTraversor
以及该运行需要哪些设置。
示例:
XWPFRun
结果:
免责声明:这是一个显示原理的工作草案。它既未完全准备就绪,也未准备好在生产环境中使用代码。