gpt4 book ai didi

java - 解析xml stax文件中的特殊字符

转载 作者:行者123 更新时间:2023-11-30 06:09:45 25 4
gpt4 key购买 nike

我有以下问题:

RSS 文件的原始部分:

  <item>
<title> I can get data in tag this </title>
<description>&lt;p&gt; i don't get data in this &lt;/p&gt;</description></item>

当我使用 StAX 解析器读取文件时,特殊字符 '<'; .它会自动转换为“<”。然后我无法在标签“<'description>'

”的其余部分获取数据

这是我的代码:

public Feed readFeed() {
Feed feed = null;
try {
boolean isFeedHeader = true;
String description = "";
String title = "";

XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = read();
XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
String localPart = event.asStartElement().getName()
.getLocalPart();
switch (localPart) {
case "title":
title = getCharacterData(event, eventReader);
break;
case "description":
description = getCharacterData(event, eventReader);
break;
}
} else if (event.isEndElement()) {
if (event.asEndElement().getName().getLocalPart() == ("item")) {
FeedMessage message = new FeedMessage();
message.setDescription(description);
message.setTitle(title);
feed.getMessages().add(message);
event = eventReader.nextEvent();
continue;
}
}
}
} catch (XMLStreamException e) {
throw new RuntimeException(e);
}
return feed;}

private String getCharacterData(XMLEvent event, XMLEventReader eventReader)
throws XMLStreamException {
String result = "";
event = eventReader.nextEvent();
if (event instanceof Characters) {
result = event.asCharacters().getData();
}
return result;}

我正在按照以下说明进行操作:http://www.vogella.com/tutorials/RSSFeed/article.html

最佳答案

教程有缺陷。它没有考虑到您可以为单个文本 block 获取多个文本事件(当您有嵌入式实体时往往会发生这种情况)。

为了让您的生活更轻松,请务必设置 IS_COALESCING在创建 XMLEventReader 之前将 XMLInputFactory 属性设置为 true(此属性强制读取器将所有相邻的文本事件合并为一个事件)。

关于java - 解析xml stax文件中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37335961/

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