Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中快速将字符串转换为xml_Java_Xml_Performance - Fatal编程技术网

在java中快速将字符串转换为xml

在java中快速将字符串转换为xml,java,xml,performance,Java,Xml,Performance,我有一个将xml字符串发送到输出流的应用程序。在将内容写入输出流之前,我必须确保文本节点中的内容(节点值中的内容)不超过固定长度。为此,我编写了一个示例代码来获取文本节点内容,它可以帮助我进行内容验证。但我担心这个示例代码是有效的,因为当我运行eclipse profiler(TPTP)时,它大约需要0.2秒。我想知道是否有更好的方法来提高性能。下面是示例代码 StringWriter stringWriter = new StringWriter(); stringWriter.w

我有一个将xml字符串发送到输出流的应用程序。在将内容写入输出流之前,我必须确保文本节点中的内容(节点值中的内容)不超过固定长度。为此,我编写了一个示例代码来获取文本节点内容,它可以帮助我进行内容验证。但我担心这个示例代码是有效的,因为当我运行eclipse profiler(TPTP)时,它大约需要0.2秒。我想知道是否有更好的方法来提高性能。下面是示例代码

 StringWriter stringWriter = new StringWriter();
     stringWriter.write("<node src='something'>nodetext goes here</node>");
     InputSource src = new InputSource(new StringReader(stringWriter.toString()));
     try {
        Element doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(src).getDocumentElement();
        System.out.println(doc.getChildNodes().getLength());
        Node n = doc.getChildNodes().item(0);
        System.out.println(n.getNodeValue());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
StringWriter StringWriter=新建StringWriter();
stringWriter.write(“nodetext在此显示”);
InputSource src=新的InputSource(新的StringReader(stringWriter.toString());
试一试{
Element doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(src).getDocumentElement();
System.out.println(doc.getChildNodes().getLength());
节点n=doc.getChildNodes().item(0);
System.out.println(n.getNodeValue());
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
} 

使用SAX解析器而不是DOM。请参见示例。

通过重用DocumentBuilderFactory,您将获得巨大的性能改进-创建工厂需要搜索类路径。重用DocumentBuilder可能也会有所帮助。然而,将XML创建为字符串、对其进行解析,然后再次对其进行序列化的总体方法在本质上似乎效率低下,我还没有真正理解您对为什么有必要这样做的解释。

尝试探索其他库,如nano parser或其他解析技术,如Stax或SAX。无法指出任何特定的技术。对于你来说,这里给出的问题背景非常少。以下是我的应用程序所做的,也许你可以建议一个更好的方法。我的web应用向浏览器发送xml响应。我必须截取响应,以确保xml标记中的文本内容不会超过某个长度。这就是我试图解析xml字符串以截断文本内容(如果有)的原因。我无法更改生成xml字符串的机制。你能想出更好的方法吗?我总是怀疑那些说“我不能改变X”的论点。这些争论导致了软件的结构性衰退。我会挑战这个假设,但这不是我的项目。