我正在使用以下代码将大型xml流转换为另一个流:
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stax.StAXSource;
public class TryMe
{
public static void main (final String[] args)
{
XMLInputFactory inputFactory = null;
XMLEventReader eventReaderXSL = null;
XMLEventReader eventReaderXML = null;
XMLOutputFactory outputFactory = null;
XMLEventWriter eventWriter = null;
Source XSL = null;
Source XML = null;
inputFactory = XMLInputFactory.newInstance(); …Run Code Online (Sandbox Code Playgroud) 我需要在XML文件中生成具有以下结构的节点:
<node attribute0="value0" attribute1="value1" > </node>
Run Code Online (Sandbox Code Playgroud)
我怎么能在StAX中做到这一点?
编辑1:我正在尝试Lars Vogel教程(http://www.vogella.de/articles/JavaXML/article.html)中"3.4.编写XML文件 - 示例"一节中的代码
我有一个包含这样数据的大文件
<releases>
<release>
......
<companies>
<company>
</company>
</companies>
</release>
<release>
......
</releases>
Run Code Online (Sandbox Code Playgroud)
我想生成和输出与输入文件相同的文件,但删除了所有公司元素及其子元素。我正在尝试使用 Stax,我认为它遍历元素,然后如果我得到匹配,我可以只是不写该元素,该部分将被删除。即,如果我扔掉导致其中的元素并被删除的元素,但它似乎只是删除了元素本身而不是其他任何东西,对吗?
IE
<releases>
<release>
......
</release>
<release>
......
</releases>
Run Code Online (Sandbox Code Playgroud)
这是我目前拥有的代码:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
InputStream in = new FileInputStream(source);
XMLEventReader reader = inputFactory.createXMLEventReader(in);
OutputStream out = new FileOutputStream(target);
XMLEventWriter writer = outputFactory.createXMLEventWriter(out);
XMLEvent event;
while(reader.hasNext()){
event = reader.nextEvent();
writer.add(event);
if(event.getEventType() == XMLStreamConstants.START_ELEMENT)
{
if(event.asStartElement().getName().toString().equalsIgnoreCase("companies"))
{
System.out.println("Deleting:"+event);
continue;
}
else
{
writer.add(event);
}
}
else
{
writer.add(event);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个xml文件,我使用XMLStreamReader对象从中读取.所以我会保持简单:
我们来看看这个xml示例:
<mySample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attribute1="value1"/>
Run Code Online (Sandbox Code Playgroud)
所以我需要的是获取值(作为字符串)"xmlns:xsi"并获取值(也作为字符串)" http://www.w3.org/2001/XMLSchema-instance "
我确实试过这样的测试:
if (reader.getEventType() != XMLStreamConstants.NAMESPACE){
attributeName = reader.getAttributeLocalName(i);
attributeValue = reader.getAttributeValue(i);
}
else{
attributeName = reader.getNamespacePrefix(i) + reader.getNamespaceURI(i);
attributeValue = reader.getAttributeValue(i);
}
Run Code Online (Sandbox Code Playgroud)
但它没有用.
显然我错过了这个API的新手,所以任何帮助都会非常受欢迎.
I'm working on a project that read RSS feed using java, I use this tutorial they using Stax parser.My question is how I can read attributes values ?
http://www.vogella.com/tutorials/RSSFeed/article.html
This is the RSSReader class,
package de.vogella.rss.read;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.XMLEvent;
import de.vogella.rss.model.Feed;
import de.vogella.rss.model.FeedMessage;
public class RSSFeedParser {
static final String TITLE = "title";
static final String DESCRIPTION = "description";
static final String CHANNEL = "channel"; …Run Code Online (Sandbox Code Playgroud) 有没有人使用过Woodstox的Stax实现http://woodstox.codehaus.org和sjsxp https://sjsxp.dev.java.net/.我遇到了一个奇怪的问题,sjsxp XmlStreamReader没有读取完整的文本值,并尝试了woodstox解决了我之前的问题.
我想和你们确认一下之前是否有人使用过woodstox,经验是什么.
Maven2在每次构建时都检查stax-ex的更新。它只是检查此单个依赖项,所有其他依赖项每天仅更新一次。
Maven2的输出:
工件org.jvnet.staxex:stax-ex:从java.net检查更新
stax-ex(组标识:org.jvnet.staxex,版本:1.2)作为jaxws-rt(组标识:com.sun.xml.ws,版本:2.1.3)的一部分包括在内。我们有一个人工仓库作为中介。
我能做什么?(离线构建将是不受欢迎的解决方法。)
我需要解析一个 xml 文件,无论其中的标签如何,并读取其所有叶子的文本(仅限文本元素)。我正在使用 StAX,但似乎无法提前知道元素是否仅为文本(因此 getElementText 为 not leave 元素引发异常)。所以我决定使用过滤器,只过滤标签元素,并以这种方式迭代抛出文档:
InputStream in = null;
try {
in = new FileInputStream("file.xml");
DatiEstratti de = DatiEstratti.getInstance();
// Processamento ad eventi
XMLInputFactory factory = (XMLInputFactory) XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(in);
// usa il filtro per filtrare solo i tag element
eventReader = factory.createFilteredReader(eventReader, new ElementOnlyFilter());
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.getEventType() == XMLStreamConstants.START_ELEMENT) {
StartElement startElement = event.asStartElement();
XMLEvent peekEvent = eventReader.peek();
if(peekEvent.isEndElement()){
// questa è la prima volta che viene …Run Code Online (Sandbox Code Playgroud) 我有一个使用STAX的小程序,它将 XML 文件的内容复制到另一个文件。顺便说一下,我发现了XMLStreamWriter 的一个神秘问题。
当我尝试写很多元素时,写作是有效的。但是当我尝试编写几个元素时,它不起作用(文件为空)。
例如,此代码有效(3000 个元素):
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(new FileOutputStream("toto.xml"));
writer.writeStartDocument();
for(int i = 0; i < 3000; ++i) {
writer.writeStartElement("toto");
writer.writeEndElement();
}
writer.writeEndDocument();
Run Code Online (Sandbox Code Playgroud)
并且此代码不起作用(50 个元素):
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(new FileOutputStream("toto.xml"));
writer.writeStartDocument();
for(int i = 0; i < 50; ++i) {
writer.writeStartElement("toto");
writer.writeEndElement();
}
writer.writeEndDocument();
Run Code Online (Sandbox Code Playgroud)
你有什么想法吗?
将org.apache.poi poi-ooxml依赖项添加到我的项目后,我现在收到以下错误:
javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI无法解析或不是字段
当我尝试查看源代码时,不再有代码,eclipse正在寻找源代码:.m2/repository/stax/stax-api/1.0.1/stax-api-1.0.1-sources.jar
stax ×10
java ×9
xml ×7
apache-poi ×1
artifactory ×1
javax ×1
maven ×1
maven-2 ×1
rss ×1
woodstox ×1
xml-parsing ×1
xslt ×1