- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 StAX 使用 XMLStreamWriter
构建 XML 文档.
但是,我的文档的某些部分很难逐个调用 XMLStreamWriter 的方法,使用 DOM 构建一个小的文档片段,然后将其写出来会更容易。
我知道如何使用 DOM,但这是我的问题:有没有简单的方法来获取 Element
对象并将其写出到 XMLStreamWriter
?
我可能会想出如何“连接”这两种方法,但它似乎很乏味而且应该已经有一些东西了。 (走另一条路似乎微不足道:http://blogs.oracle.com/venu/entry/constructing_dom_using_stax_writers)
最佳答案
没关系,我得到了一些涵盖基础知识的东西(不确定它是否适用于命名空间,但它似乎适用于简单的 DOM 节点树):
public static void writeDomToXmlStreamWriter(Node node, XMLStreamWriter xmlw) throws XMLStreamException
{
if (node != null)
{
switch (node.getNodeType())
{
case Node.ELEMENT_NODE:
{
Element element = (Element)node;
if (element.getPrefix() != null)
xmlw.writeStartElement(element.getPrefix(), element.getLocalName(), element.getNamespaceURI());
else if (element.getNamespaceURI() != null)
xmlw.writeStartElement(element.getNamespaceURI(), element.getLocalName());
else if (element.getLocalName() != null)
xmlw.writeStartElement(element.getLocalName());
else
xmlw.writeStartElement(element.getNodeName());
writeDomAttributesToXmlStreamWriter(element, xmlw);
for (Node child = element.getFirstChild(); child != null; child = child.getNextSibling())
writeDomToXmlStreamWriter(child, xmlw);
xmlw.writeEndElement();
}
break;
case Node.TEXT_NODE:
{
xmlw.writeCharacters(node.getTextContent());
}
}
}
}
private static void writeDomAttributesToXmlStreamWriter(Element element, XMLStreamWriter xmlw) throws XMLStreamException
{
NamedNodeMap map = element.getAttributes();
for (int L = map.getLength(), i = 0; i < L; ++i)
{
Node attr = map.item(i);
if (attr.getPrefix() != null)
xmlw.writeAttribute(attr.getPrefix(), attr.getLocalName(), attr.getNamespaceURI(), attr.getNodeValue());
else if (attr.getNamespaceURI() != null)
xmlw.writeAttribute(attr.getNamespaceURI(), attr.getLocalName(), attr.getNodeValue());
else if (attr.getLocalName() != null)
xmlw.writeAttribute(attr.getLocalName(), attr.getNodeValue());
else
xmlw.writeAttribute(attr.getNodeName(), attr.getNodeValue());
}
}
关于Java XML : using DOM with StAX to construct a document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5199688/
我知道使用sax时可以验证xml文件。但是我可以在使用Stax时进行验证吗? 最佳答案 SAX和DOM有两种XML验证方式: 单独验证-通过Validator.validate() 在解析期间验证-通
我在类路径中有一个 woodstox 和 java SE 1.6 stax 解析器,但默认情况下似乎选择了 woodstox。 但是在某些情况下,我想使用默认的 Java stax 解析器。有没有办法
我正面临 Woodstox STAX 和 java 1.6 STAX 实现之间奇怪的运行时冲突。由于我使用的是 CXF,它会将 Woodstox jar 作为其依赖项的一部分。这是我正在使用的示例代码
我正在尝试将一些代码从使用 DOM(通过 jDOM)转换为使用 StAX。同时,我正在从基于 DTD 的验证迁移到基于 XSD 的验证。哦,为了更好的衡量,我将 JAXB 引入等式 :) 无论如何,作
我不知道如何提取 XML 文件中的开始标记元素名称。我很接近〜意味着没有错误,我正在获取标签名称,但我正在获取标签名称加上信息。我得到的是: {http://www.publishing.org}au
对于下面发布的 xml 文件,我正在使用 StAX 来处理它。我写了下面的代码,但我不知道为什么尽管 xml 文件中有属性,但没有打印有关属性的信息。我希望控制台显示有关“id”、“lat”和“lon
我正在使用 StAX 来处理巨大的 xml 文件。如下面的代码所示,在 switch-case 中有一个默认条件。当我运行代码时默认情况下的文本打印以下内容: unhandled case4 case
我正在尝试使用 stax 从下面的 xml 中获取父项,请注意,同一结构中可以有多个父项和子项。 PARENT-CODE-1 PARENT-NAME-1
我有一个 xml <RPTSVC role:instanceID="765002" role:roleName="Re
是否有可能/是否有一种简单的方法可以找到与 START_ELEMENT 相对应的结束标记 (END_ELEMENT),如下所示? while(reader.hasNext()){ XM
我有以下(测试)XML 文件和使用 StaX 的 Java 代码。我想将此代码应用于大约 30 GB 大但元素相当小的文件,所以我认为 StaX 是一个不错的选择。我收到以下错误: 线程“main”中
我正在使用 java stax XMLStreamReader 来读取 xml。我想抓取某些内部节点的整个字符串。 XML: 我只想能够
我一直在尝试使用 StAX 创建一个 XML Controller 类。我的问题是我没有得到一个元素的完整字符串,而是得到了字符串的一小部分。 (请注意,出于安全原因,某些内容已被隐藏,这些内容将显示
我使用的是 java 6,rt.jar 具有进行基于 STaX 的解析所需的所有类。我主要使用以下类: import javax.xml.stream.XMLEventReader; import j
我正在使用 STAX 事件 API 读取从 SOAP 调用接收到的二进制数据,并希望将其流式传输给使用者。 SOAP 调用的 XML 有效负载如下所示: ......... PHNvY
我在来自 http://stax.codehaus.org/ 的 vrsion 1.2.0 中使用 StAX Streaming Api .当我尝试将以下 xml 写入文件时,不会转义大于 char
我正在使用以下简单的 StAX 代码循环访问 XML 中的所有标记。尺寸input.xml > 100 MB XMLInputFactory xif = XMLInputFactory.newInst
我正在读取与下面相同的 XML 文件: 我希望下面的代码打印出三个 e在屏幕上: XMLInputFactory factory = XMLInputFact
我有以下代码: XMLInputFactory inputFactory = XMLInputFactory.newInstance(); XMLStreamReader xmlStreamReade
我知道如何利用 java stax iterator api 来读取 xml 文档,但我想了解 XMLEvent 和 XMLEventReader 的实现。 XMLInputFactory xmlIn
我是一名优秀的程序员,十分优秀!