gpt4 book ai didi

java - StAX 不返回字符串中的所有字符

转载 作者:行者123 更新时间:2023-11-29 04:39:06 29 4
gpt4 key购买 nike

我一直在尝试使用 StAX 创建一个 XML Controller 类。我的问题是我没有得到一个元素的完整字符串,而是得到了字符串的一小部分。 (请注意,出于安全原因,某些内容已被隐藏,这些内容将显示为 {content})

Characters characters = event.asCharacters();
if (!characters.isWhiteSpace()) {
System.out.println(characters.getData());
}

上面的代码没有返回完整的字符串。

我期望收到的是:
{responseType}\([0-9]+\) ACC:[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9 ]+,[0-9]+,[0-9]+,[0-9]+

我得到的是上述字符串的 5 个独立部分:
{responseType}\([0-9]+\) ACC: [0-9]
+,[0-9]+,[0-9]
+,[0-9]+,[0-9]
+,[0-9]+,[0-9]
+,[0-9]+

我的代码:

public static ArrayList<SmsCommand> readXML() {
if (init()) {
try {
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
switch (event.getEventType()) {
case XMLStreamConstants.START_ELEMENT:
StartElement startElement = event.asStartElement();
String qName = startElement.getName().getLocalPart();
if (qName.equalsIgnoreCase("command")) {
Iterator<Attribute> attributes = startElement.getAttributes();
command = new SmsCommand(attributes.next().getValue());
}
break;
case XMLStreamConstants.CHARACTERS:
Characters characters = event.asCharacters();
if (!characters.isWhiteSpace()) {
command.addResponse(characters.getData());
}
break;
case XMLStreamConstants.END_ELEMENT:
EndElement endElement = event.asEndElement();
if (endElement.getName().getLocalPart().equalsIgnoreCase("command")) {
commands.add(command);
}
break;
}
}
}
catch (XMLStreamException e) {
e.printStackTrace();
}
}
return commands;
}

以及我的 xml:

<?xml version="1.0" ?>
<root>
<command type="{command}">
<response>{responseType} \([0-9]+\) ACC: [0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+</response>
</command>
</root>

最佳答案

StAX 解析器只是按照相同的顺序将字符分成更小的部分。您可以使用 StringBuilder 重建它,同时添加一些长度检查以确保安全。或者您可以设置一个标志以默认组合它。

By default a StAX parser will break (typically large) CHARACTER event into pieces to avoid creating large strings. You have no control over where this break occurs.

You can use a factory property “javax.xml.stream.isCoalescing” to control this behaviour and force it to combine adjacent CHARACTER events into a single event.

引用:

关于java - StAX 不返回字符串中的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997538/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com