Tag: stax

哪个.jar文件有javax.xml.stream。*?

我的Mac运行Java 1.5再次出现问题….我在哪里获得一个包含javax.xml.stream.XMLInputFactory的.jar文件? 我想使用StAX但不知道如何正确设置它。 我似乎无法得到这个设置。 我现在已经下载了jaxp-api.jar,jsr173_1.0_api.jar,sjsxp.jar,stax-api-1.0.1.jar,stax2-api-3.0.1.jar和woodstox-core-asl-4.0。 5.jar; 把它们全部放到我的java / lib / ext目录中,确保它们在我的eclipse构建路径上,删除了Mac com.apple.quarantine扩展属性,在.jar文件上做了一个“chmod a + x”,然后我尝试import javax.xml.stream.XMLInputFactory;仍会出现以下错误import javax.xml.stream.XMLInputFactory; 访问限制:由于对所需库的限制而无法访问XMLInputFactory类型/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/jsr173_1.0_api.jar 我需要做什么?

使用StAX和XPath读取大量XML文件

输入文件包含数千个XML格式的事务,大小约为10GB。 要求是根据用户输入选择每个事务XML并将其发送到处理系统。 文件的示例内容 product 1 29.99 product 2 59.59 (技术)用户应该给出输入标签名称,如 。 我们希望提供更通用的解决方案。 文件内容可能不同,用户可以提供类似“ //transactions/txn ”的XPath表达式来选择单个事务。 我们在这里需要考虑的技术问题很少 该文件可以位于共享位置或FTP中 由于文件很大,我们无法在JVM中加载整个文件 我们可以在这种情况下使用StAX解析器吗? 它必须将XPath表达式作为输入并选择/选择事务XML。 寻找建议。 提前致谢。

如何通过StAX修改巨大的XML文件?

我有一个巨大的XML(~2GB),我需要添加新元素并修改旧元素。 例如,我有: …. … …. 并希望得到: …. … …. 我使用了以下代码: XMLInputFactory inFactory = XMLInputFactory.newInstance(); XMLEventReader eventReader = inFactory.createXMLEventReader(new FileInputStream(file)); XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter(file, true)); while (eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); if (event.getEventType() == XMLEvent.START_ELEMENT) { if (event.asStartElement().getName().toString().equalsIgnoreCase(“book”)) { writer.writeStartElement(“index”); writer.writeEndElement(); } } } writer.close(); 但结果如下: …. …. …. 有任何想法吗?

什么是“推动方法”和“拉动方法”来解析?

在推送解析方法下,推送解析器在解析文档时生成同步事件,并且应用程序可以使用回调处理程序模型处理这些事件 这是关于SAX 2.0的Pro XML Development with Java一书中给出的文本。 至于StAX,这本书说: 在pull方法下,使用解析器在应用程序的控制下从XML文档中提取事件。 我想问一下,突出显示文本的含义是什么? 一个适合初学者的答案表示赞赏:)

为什么STAX解析器认为这是有效的XML 1.0而不是1.1?

在下面的代码示例中,我使用STaX解析器来解析一段XML。 如果我通过它运行xml10,它按预期工作。 xml11字符串(除了xml版本之外是相同的) – 它会抛出NullPointerException。 我在使用JDK 1.6的Mac上运行它。 import javax.xml.namespace.QName; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringReader; import java.util.Stack; /** */ public class StaxSucks { static String xml10 =”\n”+ “”; static String xml11 =”\n”+ “”; static void parse(InputStream is) throws Exception{ final XMLInputFactory factory = XMLInputFactory.newInstance(); factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE); final XMLStreamReader xmlStreamReader […]

使用StAX格式化XML文件

我正在使用StAX XML流编写器来编写XML文件。 它将所有数据写入一行。 我希望所有标签都缩进而不是单行。

Java:解析XML文件:DOM,SAX还是StAX?

我正在使用Apache Tomcat开发RSS feed聚合器。 我想知道使用哪个解析器来读取RSS源。 我应该使用DOM,SAX还是StAX? 我知道有一些特定的库可以用java阅读RSS源,但由于这是一个大学项目,我不应该使用它们。 谢谢。

在java中将XML文件转换为CSV

@Before可能会有一些重复的问题建议,我不认为是这种情况可能首先阅读,我会尽量做到尽可能简短。 标题给出了基本概念。 这是一个示例XML(案例1): 4504216603 10:00:10.000Z 10:00:30.000Z http://url …. 这是一个示例XML(案例2): 4504216604 10:30:10.000Z value1 9823 9112 value2 11:00:10.000Z http://url …. 我从谷歌借用了这个XML,反正我的对象并不总是一样,有时还有像case2这样的额外元素。 现在我想从这两种情况中生成这样的CSV: ItemID,StartTime,EndTime,ViewItemURL,AverageTime,AveragePrice 4504216603,10:00:10.000Z,10:00:30.000Z,http://url 4504216604,10:30:10.000Z,11:00:10.000Z,http://url,value1,value2 第一行是标题,它也应该包含在csv中。 我今天得到了一些有用的链接到stax,我真的不知道什么是正确的/最佳的方法,我现在正在努力3天,不是真的愿意放弃。 告诉我你的想法你会如何解决这个问题 我忘了提到这是一个非常庞大的xml文件,最高可达1GB BOUNTY UPDATE: 我正在寻找更多的通用方法,这意味着这应该适用于任何数量的任何深度的节点,有时在示例xml中,可能会发生一个item对象具有比下一个/前一个更多的节点,所以也应该有这种情况(因此所有列和值都以CSV格式匹配)。 此外,可能会发生节点具有相同名称/ localName但不同的值和属性,如果是这种情况,则新列应显示为具有适当值的CSV。 (我在标签中添加了这个案例的例子,称为category )

为什么sax解析比dom解析更快? stax是如何工作的?

有点相关: 来自java的libxml2 是的,这个问题相当啰嗦 – 抱歉。 我保持尽可能密集。 我把这些问题加粗,以便在阅读整篇文章之前更容易窥视。 为什么sax解析比dom解析更快? 我唯一能想到的就是w / sax你可能忽略了大部分传入数据,因此不会浪费时间处理你不关心的xml部分。 IOW – 解析w / SAX后,无法重新创建原始输入。 如果您编写了SAX解析器,以便它占据每个xml节点(并因此可以重新创建原始节点),那么它不会比DOM更快吗? 我问的原因是我正在尝试更快地解析xml文档。 我需要在解析后访问整个xml树。 我正在编写一个插入第三方服务的平台,所以我无法预测xml文档的哪些部分需要以及哪些部分不需要。 我甚至不知道传入文件的结构。 这就是为什么我不能使用jaxb或sax。 内存占用对我来说不是问题,因为xml文档很小,我一次只需要1个内存。 这是解析这个相对较小的xml文档所花费的时间。 我之前没有使用过stax,但也许我需要进一步调查,因为它可能是中间地带? 如果我理解正确,stax会保留原始的xml结构并处理我要求的部分吗? 通过这种方式,原始的解析时间可能很快,但每次我要求它遍历尚未遍历的树的一部分时,那就是处理发生的时间? 如果您提供了回答大多数问题的链接,我会接受您的回答(如果他们已经在其他地方得到回答,您不必直接回答我的问题)。 更新:我在sax中重写了它,并在avg 2.1 ms上解析文档。 这比dom所采用的2.5毫秒有所改善(快16%),但这并不是我(等人)猜到的那么大。 谢谢

使用StAX为XML创建索引以便快速访问

有没有办法使用StAX和JAX-B创建索引,然后快速访问XML文件? 我有一个大型XML文件,我需要在其中查找信息。 这用于桌面应用程序,因此它应该在RAM很少的系统上运行。 所以我的想法是这样的:创建索引然后快速访问大文件中的数据。 我不能只分割文件,因为它是一个我想要不加改变地使用的官方联邦数据库。 使用XMLStreamReader我可以快速找到一些元素,然后使用JAXB来解组元素。 final XMLStreamReader r = xf.createXMLStreamReader(filename, new FileInputStream(filename)); final JAXBContext ucontext = JAXBContext.newInstance(Foo.class); final Unmarshaller unmarshaller = ucontext.createUnmarshaller(); r.nextTag(); while (r.hasNext()) { final int eventType = r.next(); if (eventType == XMLStreamConstants.START_ELEMENT && r.getLocalName().equals(“foo”) && Long.parseLong(r.getAttributeValue(null, “bla”)) == bla ) { // JAX-B works just fine: final JAXBElement foo = unmarshaller.unmarshal(r,Foo.class); […]