请注意,这是使用 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?
}
我知道我需要遍历解析器。但我如何提取实际文档呢?我所需要的只是文档字符串,这样我就可以将其传递给离线处理。
谢谢!
编辑
我正在考虑做这样的事情:
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/