JavaJSOUP解析html的下标和上标
我正在使用Jsoup
将剪贴板值解析为html代码,但它不适用于subscript
和superscript
。例如:
上标
你好世界(HTML:<b>Hello <sup>World</sup></b>
)
下标
你好World(HTML:<b>Hello <sub>World</sub></b>
)
代码
result = rtfToHtml(new StringReader(streamToString((InputStream) contents.getTransferData(dfRTF))));
上述示例的结果为:
< html >
< head >
< style >
< !--
p.default {
size:3;
family:sansserif;
foreground:#000000;
bold:normal;
italic:;
}
-- >
< /style >
< /head >
< body >
< p class=default >
< span style="color: #000000; font-size: 14pt; font-family: ArialMT">
< b>Hello < /b>
< /span>
< span style="color: #000000; font-size: 11pt; font-family: ArialMT">
< b>World< /b>
< /span>
< /p>
< /body>
< /html>
知道我如何使用Jsoup处理Superscript
和Subscript
吗。如有任何建议或推荐,我们将不胜感激
编辑
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable contents = clipboard.getContents(null);
DataFlavor dfRTF = new DataFlavor("text/rtf", "Rich Formatted Text");
DataFlavor dfTxt = DataFlavor.stringFlavor;
boolean hasTransferableRTFText = (contents != null)
&& contents.isDataFlavorSupported(dfRTF);
boolean hasTransferableTxtText = (contents != null)
&& contents.isDataFlavorSupported(dfTxt);
if (hasTransferableRTFText) {
try {
result = rtfToHtml(new StringReader(streamToString((InputStream) contents.getTransferData(dfRTF))));
Document doc = Jsoup.parse(result);
}
}
编辑
public static String rtfToHtml(Reader rtf) throws IOException { // From http://www.codeproject.com/Tips/136483/Java-How-to-convert-RTF-into-HTML
JEditorPane p = new JEditorPane();
p.setContentType("text/rtf");
EditorKit kitRtf = p.getEditorKitForContentType("text/rtf");
try {
kitRtf.read(rtf, p.getDocument(), 0);
kitRtf = null;
EditorKit kitHtml = p.getEditorKitForContentType("text/html");
Writer writer = new StringWriter();
kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength());
return writer.toString();
} catch (BadLocationException e) {
e.printStackTrace();
}
return null;
}
# 1 楼答案
您的问题与JSoup无关,而是与rtfToHtml函数有关
您的函数不会生成<;sub>;和<;sup>;你期待的标签。 JSoup在此步骤中无法执行任何操作,因为预期的标记不在这里,因此无法解析它们
编辑:(和解决方案)
如果没有必要,您应该跳过rtfToHTML步骤。如果剪贴板包含已经是HTML格式的数据,那么在rtf中请求它,然后将其转换回HTML意味着在转换过程中丢失格式信息
您可以直接以HTML格式获取剪贴板,以避免不必要的转换:
通过从Chrome和FF复制到剪贴板进行测试。两者都保留了<;sub>;和<;sup>;你期望的标签
EDIT2:
IOUtils指的是组织。阿帕奇。平民伊奥。IOUtils
# 2 楼答案
使用Jsoup的选择器获取所需的值Thislink将帮助您