标签: stax

使用StAX对XML文档进行小修改

我目前正在尝试读取XML文件,进行一些小的更改(更改某些属性的值),然后再将其写回.

我打算使用StAX解析器(javax.xml.stream.XMLStreamReader)读取每个事件,看看它是否是我想要更改的,然后javax.xml.stream.XMLStreamReader如果不需要更改则直接传递给StAX writer().

不幸的是,这看起来并不那么简单 - 作者无法获取事件类型和解析器对象,只有像writeAttribute和的方法writeStartElement.很显然,我可以用一个可以在XML文档中出现的每种可能类型的元素的大小写一个大的switch语句,然后再把它写回来,但是看起来它应该很简单似乎很麻烦.

是否有一些我缺少的东西可以很容易地将一个非常相似的XML文档写入您使用StAX读取的文档?

java xml stax

5
推荐指数
1
解决办法
4219
查看次数

StAX - 如何将XMLInputFactory.IS_VALIDATING设置为true?

这是我第一次使用StAX解析XML文档(仍处于学习阶段).在使用XMLStreamReader解析XML文档并使用XMLStreamWriter生成文档副本的过程中,我遇到了以下警告,该警告在writer的输出中表示为注释:

 <!-- Exception scanning External DTD Subset.  True contents of DTD cannot be determined.  Processing will continue as XMLInputFactory.IS_VALIDATING == false. -->
Run Code Online (Sandbox Code Playgroud)

我理解警告的原因,但我希望它成为一个错误,而不是默默地成为一个警告,所以然后我尝试将XMLInputFactory.IS_VALIDATING设置为true:

 XMLInputFactory factory = XMLInputFactory.newInstance();
 factory.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)

但上面对我提出了一个例外:

线程"main"中的异常java.lang.IllegalArgumentException:com.sun.org中的com.sun.org.apache.xerces.internal.impl.PropertyManager.setProperty(PropertyManager.java:150)不支持isValidating的true值. com.test.test.helper.Test.main中的com.test.test2.helper.SgmlDocumentParser.parse(SgmlDocumentParser.java:83)中的internal.stream.XMLInputFactoryImpl.setProperty(XMLInputFactoryImpl.java:257)(Test.java: 66)

那我的方法出了什么问题呢?

谢谢!

java stax xml-parsing

5
推荐指数
1
解决办法
2985
查看次数

如何指定要使用的stax解析器

我在类路径中有一个woodstox和java SE 1.6 stax解析器,但woodstox似乎默认被选中.但是在某些情况下我想使用默认的Java stax解析器.有没有办法指定使用哪个实现?

stax woodstox

5
推荐指数
1
解决办法
3890
查看次数

如何将XMLStreamReader转换为XMLStreamWriter

应该是容易和明显但我无法找到一种方式 - XMLOutputFactory接受anly OutputStream,Result或另一种方式Writer来生成新的XMLStreamWriter.

我手边的东西是XMLStreamReader没有提取a Result或a的方法OutputStream.

如果使用Event API更容易解决方案,那也没关系.

谢谢

java xml io stax sax

5
推荐指数
1
解决办法
6269
查看次数

StAX和命名空间

我试图将一些代码从使用DOM(通过jDOM)转换为使用StAX.与此同时,我正在从基于DTD的验证迁移到基于XSD的验证.哦,只是为了好的措施,我将JAXB引入等式:)

无论如何,作为临时迁移步骤,我想允许用户仍然提供遗留文档(也就是说,使用DTD,因此没有命名空间).我仍然会使用XSD验证文档,因此忽略了DTD.除了StAX(也不是JAXB)似乎不喜欢非命名空间的文档之外,这是有效的.我尝试禁用名称空间支持(使用javax.xml.stream.isNamespaceAware),但这没有任何效果.明确地将xmlns添加到文档根目录修复了问题,因此我相当确定它是一个命名空间问题.

有没有办法使用StAX XMLEventReader"引入"默认命名空间?这种方法的某些方面(特定于SAX),但对于StAX ......

或者关于如何实现这一目标的任何其他想法?

示例文档如下所示:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.test.abstractembeddedcomponents.cid">
    ...
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

我目前用来阅读这些文件的代码是:

public JaxbRoot unmarshal(InputStream stream, Origin origin) {
    try {
        XMLEventReader staxReader = staxFactory().createXMLEventReader( stream );
        try {
            return unmarshal( staxReader, origin );
        }
        finally {
            try {
                staxReader.close();
            }
            catch ( Exception ignore ) {
            }
        }
    }
    catch ( XMLStreamException e ) {
        throw new MappingException( "Unable to create stax reader", e, origin …
Run Code Online (Sandbox Code Playgroud)

stax

5
推荐指数
1
解决办法
7001
查看次数

Java - XML解析器性能:Sun Java Streaming XML Parser(SJSXP)与Woodstox

我正在寻找最新的,内存效率和高性能的Java XML解析API.我需要解析3 MB到5 MB的XML文件.

我对此进行了谷歌搜索并了解了Sun Java Streaming XML Parser(SJSXP),而Woodstox比DOM和SAX快得多.两者都使用StAX API.*这些技术不支持架构验证.

Aalto XML处理器也实现了StAX API.

我没有找到关于这些技术的性能的具体发现.

哪一个在内存高效,高性能和易用性方面最佳?

java xml stax xml-parsing woodstox

5
推荐指数
1
解决办法
4635
查看次数

如何将非转义XML写入XMLStreamWriter?

我有一些小的XML块,应该作为子元素嵌入到一个大的XML中.有没有办法在XMLStreamWriter没有逃避它们的情况下编写这些块?

java xml stax

5
推荐指数
1
解决办法
3607
查看次数

XMLInputFactory是线程安全的吗?

在对应用程序进行性能分析时,我注意到一遍又一遍地创建XMLInputFactory实例非常昂贵。在多个线程之间共享其实例是否安全?

Javadoc没有任何关于其线程安全性的信息,并且在互联网上搜索并不能给出明确的答案!

java xml stax java-7

5
推荐指数
1
解决办法
3576
查看次数

为给定的XML模式生成Stax Writer API

我有一个XML模式。我在Stax上写了一层薄薄的文字,以允许“即时”生成符合条件的文档(我不需要类似dom的API,我需要的空间很小/没有空间)。该API具有如下方法:

writeCar(String manufacturer)
writeWheels(String manufacturer, boolean winter)
...
Run Code Online (Sandbox Code Playgroud)

它们执行状态检查,然后调用适当的stax方法。

一个特殊之处是没有writeEndXXX方法(我的架构是明确的,因此您无法在wheel元素内放置任何汽车。这意味着我总是知道何时关闭打开的元素)。唯一的例外是,有一个flush()将写入所有未决的结束标记。

writeCar(..)   // <car>
writeWheels(..) // inside the car <wheels>
writeCar(..) // close the pending tags </wheels></car> and new car <car>
flush() // this writes all pending close tags
Run Code Online (Sandbox Code Playgroud)

这很好。现在,模式发展了:)

我现在正在手动更新API。因为我很道德,所以我真的不想这样做:)。给定XML模式定义后,是否有可用的工具可以生成此类API(或类似的API)?

xml stax xsd

5
推荐指数
1
解决办法
414
查看次数

如何使用java语言获取STAX的属性处理值?

我想获取xml文件的属性值而不知道它的索引,因为属性在xml文件中的多个元素中重复.

这是我的xml文件

<fields>
  <form name="userAdditionFrom"> 
  </form>
</fields>
Run Code Online (Sandbox Code Playgroud)

这是proccing文件

 case XMLEvent.ATTRIBUTE:
      //how can i know the index of attribute?
       String attName = xmlReader.getAttributeValue(?????); 
       break;
Run Code Online (Sandbox Code Playgroud)

提前.

阿拉

java xml stax

4
推荐指数
1
解决办法
9264
查看次数

标签 统计

stax ×10

java ×7

xml ×7

woodstox ×2

xml-parsing ×2

io ×1

java-7 ×1

sax ×1

xsd ×1