问题标签 [stax]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
4109 浏览

java - JAVA:使用 XmlStreamReader 收集 xml 标签的字节偏移量

有没有办法使用 XMLStreamReader 准确地收集 xml 标签的字节偏移量?

我有一个需要随机访问的大型 xml 文件。我不想将整个内容写入数据库,而是希望使用 XMLStreamReader 运行一次以收集重要标签的字节偏移量,然后稍后能够使用 RandomAccessFile 检索标签内容。

XMLStreamReader 似乎没有办法跟踪字符偏移量。相反,人们建议将 XmlStreamReader 附加到跟踪已读取字节数的阅读器(例如apache.commons.io提供的 CountingInputStream )

例如:

不幸的是,必须进行一些缓冲,因为上面的代码为多个标签打印出相同的字节偏移量。是否有更准确的方法来跟踪 xml 文件中的字节偏移量(最好不要放弃正确的 xml 解析)?

0 投票
1 回答
930 浏览

java - 如何将节点添加到现有 XML 文档

我正在使用 stax 来解析我的文档,这是我的 XML 文档的一个虚拟示例:

如何在第 n 本书之后插入节点(其中 n 是任意数字)。谢谢你

0 投票
2 回答
509 浏览

java - Staxmate API 的缩进问题

我正在使用 Staxmate API 生成 XML 文件。阅读教程后:http ://staxmate.codehaus.org/Tutorial我尝试在我的代码中进行更改。最后我添加了电话

这会导致新生成的 XML 文件为空!如果没有此方法调用,整个 XML 文件将按预期生成。

怀疑项目设置中有问题,我使用教程中给出的代码在同一个包中创建了一个测试类:

现在,当我从我的代码中调用该main(String)方法时,问题仍然存在,而如果我只是按原样运行类 Test,它可以顺利运行!我的代码涉及数据库初始化和其他一些特定于产品的操作。

我迷路了,有什么想法应该如何进行吗?

0 投票
8 回答
36252 浏览

java - 在java中将XML文件转换为CSV

@Before 可能会有一些重复的问题建议,我认为不是这种情况可能先阅读此内容,我会尽量简短。标题给出了基本的想法。

这是一个示例 XML(案例 1):

这是一个示例 XML(案例 2):

我从谷歌借了这个 XML,反正我的对象并不总是一样的,有时会有额外的元素,比如 case2。现在我想从这两种情况下生成这样的 CSV:

第一行是标题,它也应该包含在 csv 中。我今天得到了一些有用的 stax 链接,我真的不知道什么是正确/最佳的方法,我现在为此苦苦挣扎了 3 天,还不太愿意放弃。

告诉我你的想法你会如何解决这个问题

我忘了提到这是一个非常大的 xml 文件,最大 1gb

赏金更新:

我正在寻找更通用的方法,这意味着这应该适用于具有任何深度的任意数量的节点,有时就像在示例 xml 中一样,可能会发生一个item对象的节点数比下一个/前一个对象多,所以有也应该是这种情况(因此所有列和值都在 CSV 中匹配)。

也可能发生节点具有相同的名称/本地名称但不同的值和属性,如果是这种情况,那么新列应该以适当的值出现在 CSV 中。(我在<averages>名为 的标签中添加了这种情况的示例category

0 投票
2 回答
22079 浏览

java - 如何获取具有值 Stax 的元素

我试图只获取具有文本的元素,例如 xml :

它应该打印

这段代码还打印了 root、item 等。是否有可能,一定是我无法用谷歌搜索它。

编辑不正确的行为

我不希望打印没有文本的根节点和其他节点,只是我上面写的输出。谢谢你

0 投票
1 回答
396 浏览

java - 如果它们都在类路径中,如何选择实现 sjsxp 和 wstx

Axis2 依赖于 woodstox 的 wstx,而我项目的其他部分已经使用 sjsxp 进行了大量测试,我们无法重新运行相同的测试。现在,使用axis2解析SOAP消息存在问题,如果我拿走sjsxp,问题就消失了。有没有办法告诉axis2使用wstx实现而让项目的其余部分单独使用sjsxp实现?

0 投票
1 回答
160 浏览

scala - 部署过程中的Scala + stax编译问题

我在 scala-ide(eclipse 插件)中开发了一个应用程序,没有错误或警告。现在我正在尝试将其部署到 stax 云:

但它无法编译它:

我看到两个错误,它在抱怨:第一个是 FlickrUtils 类构造函数,它的定义如下:

第二个是事实,Photo 类中缺少两个字段,即:

似乎 stax sdk 使用了错误的编译器(?)。我如何让它使用正确的?如果不是,这里有什么问题,有什么方法可以解决它?

编辑: $ scala -version

我尝试scalac手动编译所有内容,将所有内容放在他们的位置,然后运行stax deploy​​- 结果相同。

0 投票
1 回答
1619 浏览

java - 我应该如何针对 W3 Schema 使用 Stax2 验证 API

我正在使用com.ctc.wstx.stax.WstxOutputFactory来生成 XML。我正在运行 wstx-asl-3.2.4

我需要开始针对 W3 Schema 验证生成的 XML。

当我像这样创建org.codehaus.stax2.validation.XMLValidationSchemaFactory的实例时

private final static XMLValidationSchemaFactory xsdFact= XMLValidationSchemaFactory.newInstance(XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA);

我得到错误

javax.xml.stream.FactoryConfigurationError:没有指定或可访问的 XMLValidationSchemaFactory 实现类(通过系统属性“org.codehaus.stax2.validation.XMLValidationSchemaFactory.w3c”或“META-INF/services/org.codehaus.stax2. org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:208) 在 org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:98) 的验证.XMLValidationSchemaFactory.w3c')

我可以看到woodstox 只捆绑了一个DTD 解析器。我发现这篇文章 包含无用的说明

  1. 获取一个 XMLValidationSchemaFactory 的实例,该实例知道如何解析您需要的类型的模式(本例中为 RelaxNG == rng)。

我一直在研究Sun Multi-Schema XML Validator,它应该包含连接到 XMLSchemaValidation 工厂所需的位。

看起来我可以使用com.sun.msv.reader.xmlschema.XMLSchemaReader 来编写我自己的 XMLValidationSchemaFactory 实例并让它以这种方式工作。

我的问题是;我真的必须这样做吗,还是我找不到预先存在的 w3c 模式工厂?

也许在我生成XML之后验证它会更简单。

对此有何看法?

0 投票
2 回答
2194 浏览

java - 为什么 XMLEventReader 报告包含标记的 CHARACTERS 事件?

我有一个 XMLEventReader。它是从使用“UTF8”编码的 XMLInputFactory 构建的。我正在使用它来读取“编码”属性设置为“UTF-8”的 XML 文件。

我已验证 XML 文件在 Firefox 下正确查看。当您查看页面编码时,它会说它是 UTF-8。

我已将 XMLEventReader 设置为合并字符事件,如下所示:

XML 文档没有 DTD。这是有效的。

XMLEventReader 偶尔会报告已接收到内容为(减去引号)的 CHARACTERS 事件,例如:

请注意样本末尾附近存在标记标签,以及大写的荆棘。另请注意,该句子已被删除;大概在此之前还有另一个 CHARACTERS 事件,其中包含句子的前导部分。

为什么 XMLEventReader 搞砸了解析?为什么字符显示不正确?为什么 XMLEventReader 不合并 CHARACTERS 事件,如果是这样的话?为什么 StAX 如此丑陋和不可预测,令人难以置信?

我在 Mac 上使用我的 Java 运行时 (Java 6) 提供给我的 XMLEventReader。

这是一些示例 XML,当然我只是从我的编辑器中复制的,所以谁知道结果发生了什么字符转换,但无论如何:

请注意第 3 行的“智能撇号”。

我通过对 CHARACTERS 事件做出反应,将其内容保存到堆栈上的字符串,然后对名称为“问题”的 END_ELEMENT 事件做出反应来阅读此内容。在接收到 END_ELEMENT 事件后,我检索了我刚才提到的字符串的值,并构造了一个 Java 对象,该对象将我刚才提到的字符串作为输入。

当我 System.out.println() 结果时,我(有时)得到我之前提到的虚假垃圾。

当我将 System.out 包装在带有“UTF8”编码集的 PrintWriter 中时,这样我就不会简单地根据平台的编码输出字符,我会得到相同的结果。

0 投票
4 回答
17305 浏览

java - 为什么 sax 解析比 dom 解析快?以及 stax 是如何工作的?

有点相关:来自 java 的 libxml2

是的,这个问题相当冗长 - 抱歉。我保持尽可能密集。我将问题加粗,以便在阅读整个内容之前更容易窥视。

为什么sax解析比dom解析快? 我唯一能想到的是,使用 sax 您可能会忽略大部分传入数据,因此不会浪费时间处理您不关心的部分 xml。IOW - 使用 SAX 解析后,您无法重新创建原始输入。 如果您编写了 SAX 解析器,以便它解释每个 xml 节点(并因此可以重新创建原始节点),那么它不会比 DOM 快吗?

我问的原因是我试图更快地解析 xml 文档。我需要在解析后访问整个 xml 树。我正在为要插入的第 3 方服务编写一个平台,因此我无法预测需要 xml 文档的哪些部分以及不需要哪些部分。我什至不知道传入文档的结构。这就是我不能使用 jaxb 或 sax 的原因。内存占用对我来说不是问题,因为 xml 文档很小,我一次只需要 1 个内存。解析这个相对较小的 xml 文档需要花费时间,这让我很头疼。我以前没有使用过 stax ,但也许我需要进一步调查,因为它可能是中间立场? 如果我理解正确, 这样一来,原来的解析时间可能会很快,但是每次我要求它遍历它尚未遍历的树的一部分时,那是处理发生的时间吗?

如果您提供回答大部分问题的链接,我将接受您的回答(如果我的问题已经在其他地方得到回答,您不必直接回答我的问题)。

更新:我用 sax 重写了它,它解析文档的时间平均为 2.1 毫秒。这是 dom 所花费的 2.5 毫秒的改进(快 16%),但这不是我(等人)猜到的幅度

谢谢