java - 如何从 FilteredReader 中获取 XML 文档?

标签 java scala xml-parsing

请注意,这是使用 Java API 的 Scala 代码。阅读文档和示例后,我已经能够提出这个从流连接获取 XML 文档的解决方案:

  val connection = getConnection(URL, USER, PASSWORD)
  val inputStream = connection.getInputStream()
  
  val factory = XMLInputFactory.newInstance()
  val parser = factory.createFilteredReader(factory.createXMLStreamReader(inputStream), new XMLDocFilter())

  while(parser.hasNext){
    // what to do?
  }

我知道我需要遍历解析器。但我如何提取实际文档呢?我所需要的只是文档字符串,这样我就可以将其传递给离线处理。

谢谢!

编辑

我一直在关注:http://www.java-tips.org/java-ee-tips/enterprise-java-beans/introducing-the-sun-java-streaming-xml-p.html

我正在考虑做这样的事情:

while(parser.hasNext) {
  println(parser.next)
}

但问题是上面返回的是一个 boolean 值。有什么办法使它成为文档吗?

最佳答案

你使用'peak()'方法; 请引用我的java代码。 也许,很容易改变scala代码 祝你好运

import java.io.File;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathExpressionException;

import org.xml.sax.SAXException;

public class DomParserMain {
    final static String ROOT_NODE_NAME = "data";
    final static String FILE_PATH =  "/Users/file.xml";
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, JAXBException, XMLStreamException, XPathExpressionException, TransformerException {
        XMLInputFactory xif = XMLInputFactory.newInstance();
        XMLEventReader  xmlr = null;

        xmlr = xif.createXMLEventReader((new FileInputStream(new File(FILE_PATH))));

        boolean inline = false;
        StringBuffer sb = new StringBuffer(1024 * 66);
        while(xmlr.hasNext()){
            XMLEvent event = xmlr.nextEvent();

            if (event.isStartElement() ){
                StartElement element = (StartElement) event;
                if( ROOT_NODE_NAME.equals( element.getName().toString().trim() ) ) {
                    inline = true;
                }
            }

            if(inline) {
                sb.append( xmlr.peek()  );
            }

            if (event.isEndElement() ){
                EndElement element = (EndElement)event ;
                if( ROOT_NODE_NAME.equals( element.getName().toString().trim() ))  {
                    inline = false;
                    System.out.println("=====");
                    System.out.println(sb.toString());
                    System.out.println("=====");
                    sb.setLength(0);
                }
            }
        } 
    }
}

关于java - 如何从 FilteredReader 中获取 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17582538/

相关文章:

multithreading - Scala中对象级别的Val和线程安全

java - (Node.js/Java) 如何使 XML 输出漂亮

java - 在用于 java - web 应用程序的 Google 应用程序引擎中解析 xml 数据所需的合适解析器

Java 并发集合和可见性

java - 当我已经定义了 bean 时,为什么会收到 NoSuchBeanDefinitionException?

scala - 我们是否应该总是在 Trait 中使用 `override`

scala - 支撑或不支撑 : case statement block

sql - 遍历 XML 节点并在 SQL Server 中发送电子邮件

java - 使用 java 流将评级列表转换为平均评级列表

java - 为什么不同的谓词接口(interface)n JAVA 8?