从流输入中解析没有根元素的 XML 片段列表

Parse a list of XML fragments with no root element from a stream input(从流输入中解析没有根元素的 XML 片段列表)
本文介绍了从流输入中解析没有根元素的 XML 片段列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

在 Java 中使用 SAX api 从流输入中解析没有根元素的 XML 片段列表是否可行?

Is it feasible in Java using the SAX api to parse a list of XML fragments with no root element from a stream input?

我尝试解析这样的 XML,但得到了一个

I tried parsing such an XML but got a

org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.

甚至在 endDocument 事件被触发之前.

before even the endDocument event was fired.

我不想解决明显但笨拙的解决方案,例如预先附加自定义根元素或使用缓冲片段解析".

I would like not to settle with obvious but clumsy solutions as "Pre-append a custom root element or Use buffered fragment parsing".

我正在使用 Java 1.6 的标准 SAX API.SAX 工厂有 setValidating(false) 以防万一.

I am using the standard SAX API of Java 1.6. The SAX factory had setValidating(false) in case anyone wondered.

推荐答案

首先,最重要的是,您正在解析的内容不是 XML 文档.来自 XML 规范:

First, and most important of all, the content you are parsing is not an XML document. From the XML Specification:

[定义:只有一个元素,称为根,或文档元素,其任何部分都不会出现在任何其他元素的内容中.]

[Definition: There is exactly one element, called the root, or document element, no part of which appears in the content of any other element.]

现在,至于用 SAX 解析这个 - 尽管你说过笨拙 - 我建议采用以下方法:

Now, as to parsing this with SAX - in spite of what you said about clumsiness - I'd suggest the following approach:

Enumeration<InputStream> streams = Collections.enumeration(
    Arrays.asList(new InputStream[] {
        new ByteArrayInputStream("<root>".getBytes()),
        yourXmlLikeStream,
        new ByteArrayInputStream("</root>".getBytes()),
    }));

SequenceInputStream seqStream = new SequenceInputStream(streams);

// Now pass the `seqStream` into the SAX parser.

使用 SequenceInputStream 是将多个输入流连接成单个流的便捷方式.它们将按照传递给构造函数的顺序被读取(或者在这种情况下 - 由 Enumeration 返回).

将它传递给您的 SAX 解析器,您就完成了.

Pass it to your SAX parser, and you are done.

这篇关于从流输入中解析没有根元素的 XML 片段列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Reliable implementation of PBKDF2-HMAC-SHA256 for JAVA(PBKDF2-HMAC-SHA256 for JAVA 的可靠实现)
Correct way to sign and verify signature using bouncycastle(使用 bouncycastle 签名和验证签名的正确方法)
Creating RSA Public Key From String(从字符串创建 RSA 公钥)
Why java.security.NoSuchProviderException No such provider: BC?(为什么 java.security.NoSuchProviderException 没有这样的提供者:BC?)
Generating X509 Certificate using Bouncy Castle Java(使用 Bouncy Castle Java 生成 X509 证书)
How can I get a PublicKey object from EC public key bytes?(如何从 EC 公钥字节中获取 PublicKey 对象?)