【问题标题】:Parse special characters in xml stax file解析 xml stax 文件中的特殊字符
【发布时间】:2016-05-20 00:03:57
【问题描述】:

我有以下问题:

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 解析器读取文件时,特殊字符 '&lt'; .它会自动转换为“'

的其余部分中获取数据

这是我的代码:

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

【问题讨论】:

  • 如何使用 stax 解析器读取这个文件(相关代码)?以及新的 xml 文件看起来如何(例如请)?
  • 那么您写入新文件的代码有缺陷。也许如果你展示它,我们可以帮助确定如何。
  • 第二个&lt;artists&gt;不应该是像&lt;/artists&gt;这样的结束标签吗?

标签: java parsing stax


【解决方案1】:

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

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

【讨论】:

  • 好的@jtahlborn。我知道了。非常感谢! :)
  • @joseJv - 如果这是正确答案,您应该将其标记为正确答案。很高兴它对你有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多