我的htmlcontent包含大于和小于符号。但这些符号并未编码为& lt;和& gt;。为了平衡内容中的标签,我通过cyberneko html解析器传递内容。在解析大于和小于符号之间的内容之后,将丢弃。要解决这个问题,我必须在cyberneko html解析器中设置什么设置?
示例内容:
< div>平均响应时间 服务器很重要,因为它的价值 282> 0毫秒&LT峰; br> [阈值 详细信息:如果值为关键> 0, 如果value = 0则警告,如果值<清除 0]< / DIV>
解析nekohtml后
< DIV>&LT峰; br> 0]< / DIV>
请帮忙。提前致谢
答案 0 :(得分:0)
以下程序将输出
< div>平均响应时间服务器至关重要,因为它的值为282& gt; 0毫秒< br /> [阈值详细信息:如果值& gt;则为关键; 0,如果值= 0则警告,如果值& lt则清除; 0]< / DIV>
package test;
import java.io.StringReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.xerces.dom.DocumentImpl;
import org.cyberneko.html.parsers.DOMFragmentParser;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.xml.sax.InputSource;
public class TestHTMLDOMFragment {
private static final String PARSE_TEXT = "<div>Average Response Time server is critical because its value 282 > 0 ms. <br>[Threshold Details : Critical if value > 0, Warning if value = 0, Clear if value < 0]</div>";
public static void main(String[] argv) throws Exception {
DOMFragmentParser parser = new DOMFragmentParser();
// output the elements in lowercase, nekohtml doesn't do this by default
parser.setProperty("http://cyberneko.org/html/properties/names/elems","lower");
// if this is set to true (the default, you dont need to specifiy this)
// then neko html wont and an html,head and body tags to the response.
parser.setFeature("http://cyberneko.org/html/features/document-fragment",true);
Document document = new DocumentImpl();
DocumentFragment fragment = document.createDocumentFragment();
// parse the document into a fragment
parser.parse(new InputSource(new StringReader(PARSE_TEXT)), fragment);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// don't display the namespace declaration
transformer.setOutputProperty("omit-xml-declaration", "yes");
DOMSource source = new DOMSource(fragment);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}
}
上面代码中的注释显示了我使用过的解析器设置。
我还使用了org.cyberneko.html.parsers.DOMFragmentParser,因为可能也在解析只是html片段的文本
我正在使用nekohtml 1.9.14
如果你使用maven,这里是pom.xml依赖项部分......
<dependencies>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.14</version>
<type>jar</type>
</dependency>
</dependencies>