Apache XMLBeans可以读取并将部分XML文档(片段)注入XML文档吗?

时间:2014-01-16 02:43:31

标签: java xml xmlbeans

假设我有这样的事情:

FooDocument fooDoc = FooDocument.Factory.newInstance();
fooDoc.addNewBar();

如果我生成了一个代表fooDoc的字符串,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Foo>
    <Bar/>
</Foo>

现在,假设我有一个仅包含此文件的文件:

<Bar/>

而不是以Bar编程方式添加Foo,我想读取文件并将文件内容添加到fooDoc,如下所示:

FooDocument fooDoc = FooDocument.Factory.newInstance();
Bar bar = Bar.Factory.parse("file-containing-bar");
fooDoc.add(bar);

这可以与XML Bean一起使用吗?显然,仅包含Bar节点的文件不是XML文件。

2 个答案:

答案 0 :(得分:0)

Unfornutaly,“普通”文件是不可能的。首先,包含<Bar/>的文件必须是XML文件,以便传入的XML元素可以绑定到XMLBeans类型,而您的文件则不能。在此参考中,您可以阅读更多内容:XMLBeans

如果有可能将“普通”Bar文件转换为XML文件,并将foo作为foo.xml中的根元素,Bar作为bar.xml中的根,那么可能存在一些解决方法,例如:这样:

1)创建2个XML文件 foo.xml - Foo元素是root

<?xml version="1.0" encoding="utf-8"?>
<Foo>
    <Bar/>
</Foo>

和 bar.xml - bar元素是root

<?xml version="1.0" encoding="utf-8"?>
<Bar/>

2)创建2个“文档”界面

FooDocument fooDocument = FooDocument.Factory.parse("foo.xml");
BarDocument barDocument = BarDocument.Factory.parse("bar.xml");

3)创建Bar实例

Bar barToCreate = fooDocument.getFoo().addNewBar();

4)使用barToExploit(从bar.xml表示根元素Bar)

Bar barToExploit = barDocument.getBar();

然后,完全取决于您对此barToExploit实例的操作。假设它有一个存储字符串的子元素,你可以这样做:

barToCreate.setValue(barToExploit.getValue());

答案 1 :(得分:-1)

您应该能够将xml文件读入字符串数组,然后在需要的地方注入内容。你可以用

    if(fileStringArray.contains("<foo> ++ seperator + </foo>"){//inject text}

检查可以放置它的内容容器,然后将其注入其中。然后你可以将文件保存为xml文件,如下所示:

     while(fooDoc != null){
    fooDoc.write(YourString);
    fooDoc.write(Runtime().getRuntime().getProporty("line.seperator");
    }

或类似的东西。

希望这有效!祝你好运。