【问题标题】:Java Passing Strings to SAXJava 将字符串传递给 SAX
【发布时间】:2015-02-13 13:16:04
【问题描述】:

我正在构建一个创建 XML 的流程(来自各种来源并用于我事先不知道的各种目的),我想将生成的 XML 直接泵入标准 XML 处理,如 SAX、StAX , 和 DOM。我已经完成了一个 StAX 实现,它首先生成一个 XML 文件,然后 StAX 进程读取该文件。但我真的很想跳过中间文件的创建和阅读。看起来 SAX 是正确的选择,因为推送解析器非常适合这项工作。在 XML 可用时对其进行处理。

我不太明白如何设置简单地将字符串从一个 Java 组件传递到 SAX 解析器进程。我发现的大多数示例都是读取文件,并且有些示例使用 URLConnection 来支持服务类型的应用程序。在这种情况下,源将是属于同一系统的另一个 Java 组件。

【问题讨论】:

    标签: java xml-parsing sax saxparser


    【解决方案1】:

    sax 解析器可以基于Reader 从InputSource 中读取。要为其提供字符串,只需将该字符串包裹在 StringReader 中即可。

    要解析的代码如下所示:

        XMLReader xmlReader = SAXParserFactory.newInstance()
                                .newSAXParser().getXMLReader();
        //Attach content handler, etc...
        InputSource source = new InputSource(new StringReader(xml_string));
        xmlReader.parse(source);
    

    当然还有一些我懒得展示的异常处理。

    您可以在 StAX 和 DOM 中执行相同的操作,当然连接 StringReader 的详细信息会有所不同。

    【讨论】:

    • 我想这可行。 (一两天不在家尝试。)然而,当我通过它们时,为每一行或元素创建一个新的 StringReader 和 InputSource 似乎很奇怪。似乎 DOM 可能有一个真正的问题,除非我先收集到文件末尾并将其全部发送。 InputSource 也可以采用字节或字符串。我完全不确定如何使用 systemId。
    • 您也可以将字符串写入附加到PipedReader 的PipedWriter,InputSource(以及 SAX)从中读取。
    • 好的。我做了那个,我的输入源在一个单独的线程中。它似乎工作得很好。据我所知,这是最好的解决方案。我真的很想找到最简单和最好的(也是最快的),并且不完全确定使用额外的线程在某种程度上不会过分。但它很快,而且没有很多代码。在简单的测试中效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2020-04-08
    • 2016-06-01
    相关资源
    最近更新 更多