问题标签 [xmlstreamreader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
254 浏览

java - Stax XMLStreamReader 检查下一个事件而不继续前进

我有一个XML包含许多事件的大文件。我愿意unmarshal他们。因为它是一个大文件,我想unmarshal一个一个地给它们,所以整个文件不会存储在内存中。它适用于某些事件,但由于它无法映射到特定类,因为它已经在下一个事件中,因此对某些事件无效。

注意:我知道XMLEventReader但他们中的大多数人都提到它不是非常有效的内存,所以我正在尝试使用XMLStreamReader并完成它。

XML以下是包含事件的示例文件:

我有 3 个与它们相对应的类,它们将用于unmarshalling

以下是我的Main课程,将用于unmarshalling

我面临的问题是 classBC.

  1. 我需要检查传入localName的是否是extension.
  2. 如果是,extension那么我需要检查下一个元素localName是否也是extension.
  3. 如果是,那么class C如果不是,那么class B
  4. 因为在Step-2我已经移动到streamreader.next()并且如果元素不是extension那么它无法将它映射到class B因为我已经移动到next()元素并且它没有整个类。

我正在寻找一些可以执行以下操作的解决方案:

  1. 如果第二次验证中的元素不是extension,则返回上一个元素,然后将整个类分配给class B.
  2. 在进行检查时分配streamReaderto ,以便您前进。但这也失败了。tempreadertempreader

有没有办法回到流中的前一个元素,否则我该如何解决这个问题?我希望我能够提供一个完整的解释。

0 投票
1 回答
93 浏览

java - 有没有办法将 XMLStreamReader 值临时存储在另一个 XMLStreamReader 中以进行验证?

我不确定这是否可能,所以无论如何我都想询问并澄清,因为即使经过大量搜索和尝试,我也无法在这里找到类似的东西。如果发现重复真的很抱歉。

我正在尝试使用XMLStreamReader. localpart阅读后,我必须根据我需要将其分配XMLStreamReader给不同的类进行一些检查。

当我进行少量检查时,我需要检查current localpart以及next localpart. 当我尝试检查next localpart我正在推进到next元素时XMLStreamReader。因此,我尝试将其存储current XMLStreamReader在另一个中temp XMLStreamReader,但是在分配之后,当我尝试导航到下一个时,我猜current XMLStreamReader即使它temp XMLStreamReader正在发生变化,因此我无法执行某些操作。主要是我想JAXB Unmarshalling在它失败的时候执行它,因为它无法获取类的所有元素。

我知道XMLEventReaderpeek()但也失败了,所以我试图存储current XMLStreamReader但它也不起作用,我读到它不是最有效的内存。由于我的 XML 文件可能非常大,我正在尝试使用XMLStreamReader.

我希望我能够解释这个问题。我想知道是否有办法实现以下任何一项:

  1. 暂时存放current XMLStreamReader在另一个temp XMLStreamReader,以便以后使用。
  2. 如果有其他方法可以peek()进入next localpartinside XMLStreamReader

从昨天开始我就陷入了这个问题,因此从这里的专家那里获得一些意见真是太好了。

0 投票
2 回答
517 浏览

spring-boot - java.lang.OutOfMemoryError:Java 堆空间 Hibernate entityIsPersistent

我正在使用下面的代码读取 5gb 的 XML 文件,并使用 spring dataJpa 将该数据处理到数据库中,这只是我们关闭 inpustream 和 xsr 对象的示例逻辑。

我已经配置了最大 8GB(即 -xms7000m 和 -xmx8000m)的堆内存但是它在保存数据时遇到了下面的休眠堆问题。它插入了大约 700000 个数据,总共 2100000

根据上面的跟踪日志,hibernate save casacade 似乎有些问题,但无法弄清楚,下面是用于将数据保存在数据库中的实体类。

休眠实体映射是否存在占用内存的任何问题

0 投票
0 回答
39 浏览

java - 使用 XMLStreamReader 时如何从文件中读取小部分数据?

所以目前我正在XMLStreamReader阅读我拥有的文件。在文件中有标签<Data> ... </Data> 。这些标签中包含大量的 Base64 编码数据。数据可以大到 20MB。我XMLStreamReader用来到达这个 <Data>标签,然后我想部分读取数据并将其写入另一个文件。我基本上是将<Data> ... </Data> 内容传输到另一个文件。如何从小部分获取数据XMLStreamReader并将其写入另一个文件?是否可以XMLStreamReader结合某种形式InputStream和使用byte[]舒适的尺寸?以下是我当前的代码

基本上,reader.getElementText()我不想这样做,而是要小部分获取数据(也许通过使用 Byte []?)。是否可以将 XMLStreamReader 转换为 BufferedReader 并逐行读取?是否可以将 BufferedReader 包裹在 XMLStreamReader 周围?请让我知道如何使问题变得更好,因为我是新手

0 投票
0 回答
91 浏览

xml-parsing - IllegalArgumentException:输入字节数组在 396 处的结束字节不正确。xmlStreamReader CHARACTERS 事件以错误的顺序读取字符

所以我XMLStreamReader用来解析一个xml文档,其中包含<Data>....</Data>我必须逐行提取和解码的标签之间的Base64编码数据。我为XMLInputFactory:设置了以下属性,xmlInputFactory.setProperty("javax.xml.stream.isCoalescing",true)以便标签内的所有 Base64 编码文本都在一个事件<Data>....</Data>中累积。CHARACTER但是,当我将数据提取到char大小为 1024 字节的缓冲区中时,字符的顺序会被打乱。而且由于订单被打乱了,我无法对其进行解码。下面是我的代码:

<Data>....</Data>所以标签之间总共有 23944 个字符。此外,当异常发生sourceStart在 23552 并且第 396 个字节有错误时。同样,当 sourceStart在 23552 时,numCopied值 1024 显然是不正确的,因为我应该只有 23944 个字符,因此if(numCopied < length)永远不会成为真的。知道为什么会这样吗?此外,要解码的数据是机密的,所以我可能无法分享。对不起!

0 投票
0 回答
71 浏览

java - 是否可以在 XMlStreamReader 中设置 CHARACTERS 事件的最大大小?

您好,目前我正在使用 XMLStreamReader 读取文件。我在文件中的两个标签之间有大量数据。因此,我使用CHARACTERS开始和结束标签之间的事件来处理数据。有没有办法设置单个CHARACTERS 事件中的最大字符数?我有一个内存限制问题并想知道这一点,因为目前CHARACTERS事件的大小不同。例如,我希望每个CHARACTERS事件最多有 1024 个字符。谢谢!

0 投票
1 回答
18 浏览

java - 为带有“&”字符的字符串创建 XMLStreamReader

我想解组其中包含“&”字符的 xmlString。

有没有办法在不使用 replace/replaceAll 替换字符串中的 '&' 字符的情况下解组字符串?