我正在使用我的marshaller的JAXB_FRAGMENT属性来编组WorkSet级别.问题在于,当我封送它时,每次都为WorkSet元素提供xmlns属性.有没有办法编组,以便它不附加xmlns属性?这是我的XML的样子.
<Import>
<WorkSets>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
</WorkSet>
</WorkSets>
</Import>
Run Code Online (Sandbox Code Playgroud)
这是我正在使用上面创建的代码:
FileOutputStream fos = new FileOutputStream("import.xml");
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
JAXBContext jc = JAXBContext.newInstance(WorkSet.class);
Marshaller m = jc.createMarshaler();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
writer.writeStartDocument();
writer.writeStartElement("Import");
writer.writeAttribute("xmlns","http://www.namespace.com");
writer.writeStartElement("WorkSets");
while(hasWorkSet){
m.marshal(workSet, writer)
}
writer.writeEndDocument();
writer.close();
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用JAXB来解组XML文件,但似乎XML文件太大(~500mb)以供unmarshaller处理.我一直在java.lang.OutOfMemoryError: Java heap space@
Unmarshaller um = JAXBContext.newInstance("com.sample.xml");
Export e = (Export)um.unmarhsal(new File("SAMPLE.XML"));
Run Code Online (Sandbox Code Playgroud)
我猜这是因为它试图将大型XML文件作为对象打开,但该文件对于Java堆空间来说太大了.
有没有其他更"'内存有效'的方法来解析大型XML文件~500mb?或者也许是一个unmarshaller属性可以帮助我处理大型XML文件?
这是我的XML的样子
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- -->
<Export xmlns="wwww.foo.com" xmlns:xsi="www.foo1.com" xsi:schemaLocation="www.foo2.com/.xsd">
<!--- --->
<Origin ID="foooo" />
<!---- ---->
<WorkSets>
<WorkSet>
<Work>
.....
<Work>
....
<Work>
.....
</WorkSet>
<WorkSet>
....
</WorkSet>
</WorkSets>
Run Code Online (Sandbox Code Playgroud)
我想在WorkSet级别解组,仍然能够阅读每个WorkSet的所有工作.
我在使用Marshaller.JAXB_FRAGMENT属性成功编组时遇到了一些麻烦.这是我想要输出的XML的简单版本.
<Import>
<WorkSets>
<WorkSet>
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet>
<Work>
<Work>
...
</WorkSet>
<WorkSets>
<Import>
Run Code Online (Sandbox Code Playgroud)
的<Import>和<WorkSets>元件基本上围住了大量的只是容器元素<WorkSet>&<Work>元件.我现在正试图在马萨诸塞州<WorkSet>.
<Import>和<WorkSets>元素,然后从元素编组<WorkSet>并将输出封装在<Import><WorkSets>标签中?xmlns='http://namespace.com'属性附加到WorkSet标记时,有没有一种方法可以在没有将namespace属性附加到Workset的情况下编组?我正在寻找一个很好的 Java 库,它可以轻松地允许读/写固定宽度的文件。需要维护遗留系统,即需要文件才能使用 COBOL。
任何建议都非常感谢!
谢谢。
我正在创建一个非常大的XML文件(700mb +),它可以批量处理大量数据.该程序充当极大的sybase数据库和应用程序之间的接口.我目前有xsd架构绑定到类.我需要一种能够在重新启动逻辑的情况下编写XML的方法.
IE能够知道我离开的地方.或者换句话说,如果程序失败,我需要能够看到最后写入XML文件的内容,以便它可以从我中断的地方继续.这是一个例子.
<root>
<WorkSet>
<Work>
<Customer>
<Work>
<Customer>
<WorkSet>
<Work>
.....
<root>
Run Code Online (Sandbox Code Playgroud)
假设写入'work'或'workset'节点后程序失败.有没有办法找到我停止处理的地方?我试图避免由于XML文件的剪切大小而将XML文件读回内存(假设它完成500mb的XML并且失败).
谢谢您的帮助.
每个状态检查 if 语句中的 exit 语句不会中断 while 循环并真正退出脚本。我可以做些什么来打破循环并使用 $STATUS 代码退出吗?
编辑:我已经更新了我的代码,但它仍然无法正常工作。状态检查 if 语句成功打破了循环,但当我尝试评估 $EXIT_STATUS 时,它始终为空,可能与范围有关。我在这里缺少什么?
if [ $RESTART -le $STEP ]; then
. tell_step
while read XML_INPUT; do
XML_GDG=`get_full_name $GDG_NAME P`
cp $XML_INPUT $XML_GDG
STATUS=$?
EXIT_STATUS=$STATUS
if [ $STATUS -ne 0 ]; then
break
fi
add_one_gen $XML_GDG
STATUS=$?
EXIT_STATUS=$STATUS
if [ $STATUS -ne 0 ]; then
break
fi
done < $XML_STAGE_LIST
echo $EXIT_STATUS
if [ $EXIT_STATUS -ne 0 ]; then
exit $EXIT_STATUS
fi
fi
Run Code Online (Sandbox Code Playgroud) 我在使用Windows批处理文件返回JUST文件夹(忽略文件)时遇到困难。
这就是我现在所拥有的。目前,它正在重播文件和子文件夹。
for /r %%g in ("xx*") do echo %%g
Run Code Online (Sandbox Code Playgroud)
另外,说我只想返回以几个不同的前缀开头的文件夹。
例如:我只想回显“工作”文件夹中以w *,we *,cm *,cr *等开头的文件夹。我可以使用批处理文件吗?
谢谢。
java ×5
xml ×4
jaxb ×3
append ×1
batch-file ×1
file ×1
marshalling ×1
memory ×1
shell ×1
subdirectory ×1
unix ×1
while-loop ×1
windows ×1