- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一些现有代码可以解析顶级元素命名空间以确定我们正在查看的 XML 文件类型。
XMLEventReader reader = createXMLEventReader(...);
try {
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
switch (event.getEventType()) {
case XMLStreamConstants.DTD:
// No particularly useful information here?
//((DTD) event).getDocumentTypeDeclaraion();
break;
case XMLStreamConstants.START_ELEMENT:
formatInfo.qName = ((StartElement) event).getName();
return formatInfo;
default:
break;
}
}
} finally {
reader.close();
}
如果我允许解析器从网络加载 DTD,getDocumentTypeDeclaraion()
包含一个巨大的字符串,其中包含的信息比我知道的要多得多,因为它在传递之前将所有相关的 DTD 插入到字符串中。另一方面,如果我阻止解析器从 Web 加载 DTD(出于显而易见的原因,这无论如何都是可取的),它只会给我字符串 "<!DOCTYPE"
.
有没有办法取回 DOCTYPE 中的值?
我正在使用 JRE 附带的默认解析器,以防万一。
最佳答案
我知道这是一篇旧帖子,但在找到为我指明正确方向的您的问题之前,我无法在网上找到答案。
这里通过打开 XMLEvent#getEventType()
给定的值来检索 DTD 的外部未解析实体。方法。
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setXMLResolver(new XMLResolver() {
@Override
public Object resolveEntity(String publicID, String systemID,
String baseURI, String namespace) throws XMLStreamException {
//return a closed input stream if external entities are not needed
return new InputStream() {
@Override
public int read() throws IOException {
return -1;
}
};
}
});
XMLEventReader reader = factory.createXMLEventReader( . . . );
try {
while(reader.hasNext()) {
XMLEvent event = reader.nextEvent();
switch (event.getEventType()) {
case XMLStreamConstants.DTD:
List<EntityDeclaration> entities = ((DTD)event).getEntities();
if (entities != null) {
for (EntityDeclaration entity : entities)
System.out.println(entity.getName() + " = " + entity.getSystemId());
}
break;
case . . .
}
}
} finally {
reader.close();
}
关于java - 我们如何使用 XMLEventReader 解析 DOCTYPE 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7100934/
来自XMLEventReader : String getElementText() Reads the content of a text-only element. Precondition: t
我正在使用 XMLEventReader 来解析大型 xml 文件,它在一个项目中工作正常,但是当我在另一个项目中导入具有相同导入的相同类时,它不能很好地解析 xml,并且给出STAX 事件。 下面是
我刚刚尝试利用 StAX 来解析一些简单的 XML 文档 John Lisa ...但是遇到了一个让我抓狂的问题。这是代码
我希望能够将 XML 文件通过管道传输到程序中,并使用 XMLEventReader 读取它。我能为 XMLEventReader 找到的唯一构造函数将 Source 作为参数,但 scala.io.
我在 Scala xml 事件阅读器中发现了一个奇怪的行为。对于这样的 xml: AT&T Bell Labs 0 63739 它为标题生成 EvText
由于我缺乏对文件系统行为的了解,我提前道歉。 我需要读取一个大的 XML 文件,修改它,然后将其写入同一个文件。 这是我设置 XMLEventReader 和 XMLEventWriter 的代码:
我在网上冲浪。我发现 XMLStreamReader 是用于解析 XML 的游标样式 API。 XMLEventReader 是Iterator style API for Parsing XML。有
我在处理一些 .xml 时遇到了一个以前从未见过 的异常。这是损坏的代码: public class UnmarshallProva { public static void main(String[
我有一个 XMLEventReader。它是使用“UTF8”编码从 XMLInputFactory 构建的。我用它来读取“encoding”属性设置为“UTF-8”的 XML 文件。 我已验证 XML
我正在使用 XMLInputFactory 解析传入的 XML 文件,如下所示。如何从 XML 注释中获取文本?我知道如何检测它,但无法将文本输出 XMLInputFactory inputFacto
我有一些现有代码可以解析顶级元素命名空间以确定我们正在查看的 XML 文件类型。 XMLEventReader reader = createXMLEventReader(...); try {
随 Java 一起提供的 Xerces 版本有 bug when dealing with empty XML elements for XML version 1.1 input 。此错误早已在 A
我想编写一些基本上类似于 Reading a big XML file using stax and dom 的代码但使用 XMLEventReader 而不是 XMLStreamReader(我需要
我的环境正在运行 JAVA 1.5 并以这种方式将 JAXB 2.2.7 放入我的 POM 文件中。 javax.xml.bind jaxb-api 2.2.7 但是,当我
谁能解释一下为什么这段代码不能编译: import java.io.FileInputStream; import javax.xml.stream.XMLEventReader; import ja
我正在使用 Stax XML EventReader 来读取 xml。我必须验证 xml 中的一些标签,我正在使用相同的标签。我能够成功读取 xml 中的标记名和字符,但无法读取属性名称和值。我使用的
我无法检查 XML 中的 CDATA 并使用 XMLEventReader 读取它。 以下是示例: HEADERS
为什么 XMLEventReader 扩展原始 Iterator?由于 XMLEventReader.next() 返回 Object,我们必须使用显式转换。不应该是这样吗: public inter
我是一名优秀的程序员,十分优秀!