标签: stax

stax - 将xml节点作为字符串

xml看起来像这样:

<statements>
   <statement account="123">
      ...stuff...
   </statement>
   <statement account="456">
      ...stuff...
   </statement>
</statements>
Run Code Online (Sandbox Code Playgroud)

我正在使用stax一次处理一个" <statement>",然后我就开始工作了.我需要将整个语句节点作为字符串获取,这样我就可以创建"123.xml"和"456.xml",甚至可以将其加载到由account索引的数据库表中.

使用这种方法:http://www.devx.com/Java/Article/30298/1954

我想做这样的事情:

String statementXml = staxXmlReader.getNodeByName("statement");

//load statementXml into database
Run Code Online (Sandbox Code Playgroud)

java xml stax extract

6
推荐指数
3
解决办法
1万
查看次数

如何在Java中合并两个XML

我试图在Java中合并两个xmls.我正在使用STaX API来编写这些XML.我在互联网上搜索了很多关于如何合并xmls的内容,但似乎没有像C#那样直截了当.使用StAX在Java中有没有直接的方法?可能xslt不是正确的解决方案,因为文件大小可能很大.

File1.xml

<TestCaseBlock>
    <TestCase TestCaseID="1">
        <Step ExecutionTime="2011-03-29 12:08:31 EST">
            <Status>Passed</Status>
            <Description>foo</Description>
            <Expected>foo should pass</Expected>
            <Actual>foo passed</Actual>
        </Step>
       </TestCase>
</TestCaseBlock> 
Run Code Online (Sandbox Code Playgroud)

File2.xml

<TestCaseBlock>
    <TestCase TestCaseID="2">
        <Step ExecutionTime="2011-03-29 12:08:32 EST">
            <Status>Failed</Status>
            <Description>test something</Description>
            <Expected>something expected</Expected>
            <Actual>not as expected</Actual>
        </Step>
    </TestCase>
</TestCaseBlock>
Run Code Online (Sandbox Code Playgroud)

Merged.xml

<TestCaseBlock>
<TestCase TestCaseID="1">
    <Step ExecutionTime="2011-03-29 12:08:33 EST">
        <Status>Passed</Status>
        <Description>foo</Description>
        <Expected>foo should pass</Expected>
        <Actual>foo passed</Actual>
    </Step>
</TestCase>
<TestCase TestCaseID="2">
    <Step ExecutionTime="2011-03-29 12:08:34 EST">
        <Status>Failed</Status>
        <Description>test something</Description>
        <Expected>something expected</Expected>
        <Actual>not as expected</Actual>
    </Step>
</TestCase>
</TestCaseBlock>
Run Code Online (Sandbox Code Playgroud)

java xml merge stax

6
推荐指数
1
解决办法
4383
查看次数

如何使用StAX XML解析器捕获Attribute-events?

我尝试使用StAX XML解析器解析XML文件.它给了我START_ELEMENTEND_DOCUMENT事件,但没有ATTRIBUTE事件.如何ATTRIBUTE使用StAX解析器接收事件?

我的XML:

    <?xml version="1.0" encoding="utf-8"?>
    <posts>
        <row name="Jonas"/>
        <row name="John"/>
    </posts>
Run Code Online (Sandbox Code Playgroud)

我的StAX XML解析器:

public class XMLParser {

    public void parseFile(String filename) {
        XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2.newInstance();
        xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.FALSE);
        xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
        xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
        xmlif.configureForSpeed();

        XMLStreamReader2 xmlr = (XMLStreamReader2) 
                xmlif.createXMLStreamReader(new FileInputStream(filename));

                int eventType;
                while(xmlr.hasNext()) {
                    eventType = xmlr.next();
                    switch(eventType) {
                    case XMLStreamConstants.START_ELEMENT: 
                        if(xmlr.getName().toString().equals("row")) {
                            System.out.println("row");
                        }
                        break;
                    case XMLStreamConstants.ATTRIBUTE: 
                        System.out.println("Attribute");
                        break;
                    case XMLStreamConstants.END_DOCUMENT:
                        System.out.println("END");
                        xmlr.close();
                        break;
                    }
                }

    }

    public static void …
Run Code Online (Sandbox Code Playgroud)

java xml stax woodstox

6
推荐指数
1
解决办法
5186
查看次数

如何将相关系统DTD加载到StAX解析器中?

我正在使用woodstox为XML文件实现StAX解析器.假设我的文件系统中的公共目录中有一个匹配DTD的有效XML文件.

/path/to/test.xml
/path/to/test.dtd
Run Code Online (Sandbox Code Playgroud)

XML使用相对系统标识符声明引用其DTD,如下所示:

<!DOCTYPE test SYSTEM "test.dtd">
Run Code Online (Sandbox Code Playgroud)

从验证的角度来看,一切似乎都很好.(是吗?xmllint不会抱怨.)但是,当我尝试使用下面的代码解析文件时,woodstox会抛出java.io.FileNotFoundException,因为它无法找到相对的DTD文件.在我看来,实现尝试相对于工作目录而不是相对于XML文件对象访问DTD文件.

import java.io.FileInputStream;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

public class Test {

    public static void main( String[] args ) throws Exception {

        FileInputStream fileInputStream = new FileInputStream( args[0] );
        XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xmlInputFactory.createXMLStreamReader(fileInputStream);

        while( xsr.hasNext() ) {
            if( xsr.next() == XMLStreamConstants.DTD ) {
                System.err.println( xsr.getText() );
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 这是故意的吗?
  2. 是否有一种方便的方法来说服StAX解析器相对于给定的XML文件而不是相对于工作目录加载DTD?

xml stax dtd woodstox

6
推荐指数
1
解决办法
1771
查看次数

XMLStreamException:尝试输出第二个根,StaXparser

writer.writeStartElement(startElement.getName().getLocalPart());
Run Code Online (Sandbox Code Playgroud)

//当我在具有一个线程的独立计算机上运行时,它工作正常,但是当我在服务器上运行多个线程的多个作业时,它会给我以下错误:

writer.writeStartElement(startElement.getName().getLocalPart());

javax.xml.stream.XMLStreamException: Trying to output second root, <element>

ERROR [STDERR] (JBossQuartzScheduler_Worker-4) javax.xml.stream.XMLStreamException:
 Trying to output second root, <handset>
ERROR [STDERR] (JBossQuartzScheduler_Worker-4)  at com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1473)
ERROR [STDERR] (JBossQuartzScheduler_Worker-4)  at com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1480)
ERROR [STDERR] (JBossQuartzScheduler_Worker-4)  at com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1508)
ERROR [STDERR] (JBossQuartzScheduler_Worker-4)  at com.ctc.wstx.sw.BaseNsStreamWriter.checkStartElement(BaseNsStreamWriter.java:444)
ERROR [STDERR] (JBossQuartzScheduler_Worker-4)  at com.ctc.wstx.sw.BaseNsStreamWriter.writeStartElement(BaseNsStreamWriter.java:292)
Run Code Online (Sandbox Code Playgroud)

java xml stax xml-parsing

6
推荐指数
0
解决办法
3778
查看次数

Eclipse无法为XMLOutputFactory找到最新的Java 1.6方法

我正在尝试使用在Java 6中添加的newFactory()方法XMLOutputFactory.但是Eclipse保持标记newFactory()为类型的未定义XMLOutputFactory.JRE7是安装的唯一运行时,位于新Java项目的构建路径中.该项目本身只有JRE7(JRE系统库)和Ivy设置.我一直得到的错误是

The method newFactory() is undefined for the type XMLOutputFactory
Run Code Online (Sandbox Code Playgroud)

任何想法如何让Eclipse接受newFactory?几乎只是return XMLOutputFactory.newFactory()用作调用函数的唯一地方.

java stax

6
推荐指数
1
解决办法
3275
查看次数

带有 XMLEventWriter 的自闭合标签

所以这个问题与标题中所述的差不多。我正在做一些 xml 工作并使用 XMLEventWriter。我遇到的大问题是我需要创建一些自关闭标签

问题是我还没有想出用 eventWriter 来做到这一点的方法。我已经尝试了所有我能想到的使用 XMLEventFactory 的方法,但似乎没有任何效果。任何帮助将不胜感激。

java xml stax

5
推荐指数
1
解决办法
2366
查看次数

从头开始 XMLEventWriter:如何发出 xmlns 属性?

我正在尝试使用 StAX API 中的 XMLEventWriter 从头开始​​编写 XML 文档。

我不知道如何获取要发出的默认名称空间属性。

例如,默认命名空间 URI 字符串为“ http://www.liquibase.org/xml/ns/dbchangelog/1.9 ”。我希望它以 xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" 的形式出现在我的 XML 根元素中。

这里有什么神奇的配方?XMLEventWriter.setDefaultNamespace() 不起作用。

谢谢,莱尔德

java xml stax xml-namespaces

5
推荐指数
1
解决办法
3139
查看次数

Java XML:使用 DOM 和 StAX 来构建文档

我正在使用 StAX 使用XMLStreamWriter.

但是,我的文档的某些部分很难一一调用 XMLStreamWriter 的方法,使用 DOM 构造一个小的文档片段,然后将其写出会更容易。

我知道如何使用 DOM,但这是我的问题:有没有一种简单的方法来获取一个Element对象并将其写出到XMLStreamWriter?

我大概可以弄清楚如何“连接”这两种方法,但这似乎很乏味,而且应该已经有了一些东西。(走另一条路似乎微不足道:http : //blogs.oracle.com/venu/entry/constructing_dom_using_stax_writers

java xml stax dom

5
推荐指数
1
解决办法
3054
查看次数

如何覆盖 TomEE 容器内的“org.apache.cxf.stax.maxChildElements”属性值?

我有一个纯粹通过在 TomEE 7 环境中运行的注释配置的 JAX-WS Web 服务端点。基本上,被调用的方法必须返回一个List<String>包含在图形数据结构中的所有节点名称。此类请求的响应可以包含更多感谢 50k 元素。

With CXF 2.6.x this worked fine. However, when I call the WS-method under CXF 3.x (bundled in TomEE 7.x), the following exception is thrown on the server side:

org.apache.cxf.interceptor.Fault: Unmarshalling Error: Maximum Number of Child Elements limit (50000) Exceeded 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:906)
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:712)
    at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:179)
    at org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:801)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1680)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1559)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1356)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:653)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) …
Run Code Online (Sandbox Code Playgroud)

stax cxf xml-parsing apache-tomee tomee-7

5
推荐指数
1
解决办法
6773
查看次数

标签 统计

stax ×10

java ×8

xml ×8

woodstox ×2

xml-parsing ×2

apache-tomee ×1

cxf ×1

dom ×1

dtd ×1

extract ×1

merge ×1

tomee-7 ×1

xml-namespaces ×1