Java8-将非常大的XML输入转换为JSON(具有额外的属性) - java

我想将巨大的XML转换为JSON。每次识别到特定的XML标签时,我都希望将标签的XML部分转换为JSON,并想为其添加一个简单的计数器。

重要的是输入XML很大,因此无法将其放入记忆JSON树中。

所以... <xml><car>...</car><car>...</car>...

转换为

{"number":2,"car":{"name":"car1"}}
{"number":3,"car":{"name":"car2"}}

参考方案

多亏了Andreas,我终于找到了处理巨大XML文件并将匹配的xml-elements转换为JSON的解决方案。

String testCars = "<root><car><name>car1</name></car><other><something>Unknown</something></other><car><name>car2</name></car></root>";
String startElement = "car";
int volgnummer = 1;
XMLInputFactory factory = XMLInputFactory.newInstance();
try {
    XMLStreamReader streamReader = factory.createXMLStreamReader(new StringReader(testCars));
    streamReader.nextTag();
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    t.setOutputProperty("omit-xml-declaration", "yes");
    streamReader.nextTag();
    while ( streamReader.isStartElement() ||
          ( ! streamReader.hasNext() && 
            streamReader.nextTag() == XMLStreamConstants.START_ELEMENT)) {
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        t.transform(new StAXSource(streamReader), result);
        JSONObject jsonObject = XML.toJSONObject(writer.toString());
        jsonObject.put("sequence", ++volgnummer);
        System.out.println("XmlChunkToJson: " + jsonObject.toString());
    }
} catch (Exception e) {
    e.printStackTrace();
}

XML输入:

<?xml version="1.0"?>
<root>
  <car>
    <name>car1</name>
  </car>
  <other>
    <something>Unknown</something>
  </other>
  <car>
    <name>car2</name>
  </car>
</root>

输出JSON:

XmlChunkToJson: {"sequence":2,"car":{"name":"car1"}}
XmlChunkToJson: {"sequence":3,"other":{"something":"Unknown"}}
XmlChunkToJson: {"sequence":4,"car":{"name":"car2"}}

Java8;在一个线程上利用睡眠时间,但是有多个可调用对象 - java

在标准java8中是否可以在单个线程上同时执行多个可调用对象?也就是说,当一个可调用对象进入睡眠状态时,请开始处理另一个可调用对象。我目前的实验不起作用: ExecutorService executor = Executors.newSingleThreadExecutor(); List<Future> fs = new ArrayList&…

页面加载而不是提交时发生struts验证 - java

请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:<action name="*Test" method="{1}" clas…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

DataSourceTransactionManager和JndiObjectFactoryBean和JdbcTemplate的用途是什么? - java

以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean <tx:annotatio…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…