【问题标题】:cyberneko html settings to ignore unencoded greater than and less than symbolCyber​​neko html 设置忽略未编码的大于和小于符号
【发布时间】:2011-03-29 09:56:05
【问题描述】:

我的 htmlcontent 包含大于和小于符号。但是这些符号没有被编码为 <和>。为了平衡内容中的标签,我通过cyberneko html 解析器传递内容。解析后,大于和小于符号之间的内容将被丢弃。为了克服这个问题,我必须在cyberneko html 解析器中设置哪些设置?

示例内容:

平均响应时间 服务器很关键,因为它的价值 282 > 0 毫秒。
[门槛 详细信息:如果值 > 0,则为关键, 如果 value = 0 则警告,如果 value

nekohtml解析后


0]

请帮忙。提前致谢

【问题讨论】:

    标签: java cyberneko


    【解决方案1】:

    下面的程序会输出

    服务器平均响应时间很关键,因为它的值 282 > 0 毫秒。
    [阈值详细信息:如果值 > 则为严重; 0,如果值 = 0 则警告,如果值
    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);
    
        }
    }
    

    上面代码中的 cmets 显示了我使用的解析器设置。

    我还使用了 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>
    

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2021-09-01
      相关资源
      最近更新 更多