Java 从包含名称空间前缀的xml字符串片段创建xom文档

Java 从包含名称空间前缀的xml字符串片段创建xom文档,java,xml,xom,Java,Xml,Xom,我有一个包含xml片段的文件。我需要将一个子元素添加到此文件并重新保存它。我试图在Java(1.6)中使用xom。 问题是文件中的数据包含名称空间前缀,因此当我构造文档对象时,会得到: [致命错误]tsip:1:33:与元素类型“publications”关联的属性“tsip:action”的前缀“tsip”未绑定 该文件包含以下内容: <publications tsip:action="replace"> <publication tsip:dw="000000" tsip

我有一个包含xml片段的文件。我需要将一个子元素添加到此文件并重新保存它。我试图在Java(1.6)中使用xom。 问题是文件中的数据包含名称空间前缀,因此当我构造文档对象时,会得到:

[致命错误]tsip:1:33:与元素类型“publications”关联的属性“tsip:action”的前缀“tsip”未绑定

该文件包含以下内容:

<publications tsip:action="replace">
<publication tsip:dw="000000" tsip:status="dwpi:equivalent" tsip:lang="ja" tsip:drawings="0">
    <documentId>
        <number tsip:form="dwpi">58071346</number>
        <countryCode>JP</countryCode>
        <kindCode>A</kindCode>
    </documentId>
</publication>
</publications>
我怀疑我需要使代码名称空间具有意识,即添加如下内容:

doc.getRootElement().addNamespaceDeclaration("tsip", "http://schemas.thomson.com/ts/20041221/tsip");
但在创建文档之前,我看不到如何执行此操作。
任何帮助、建议都值得赞赏。

一种解决方案是将xml片段读入字符串,然后将其包装在包含名称空间声明的伪标记中。例如:

        StringBuilder sb = new StringBuilder();
        sb.append("<tag xmlns:tsip=\"http://schemas.thomson.com/ts/20041221/tsip\">");
        String xmlFrag = new String(Files.readAllBytes(Paths.get("C:/myFileName")));
        sb.append(xmlFrag);
        sb.append("</tag>");
        Builder parser = new Builder();
        Document doc = parser.build(sb.toString(), null);

然后像往常一样使用XOM写出他修改过的片段。

谢谢Tony。我确实想到了这个解决方案,但它似乎有点复杂,可能有点慢。无论如何,由于xml片段最终非常基本,我只使用了简单的字符串操作(没有xom)
        StringBuilder sb = new StringBuilder();
        sb.append("<tag xmlns:tsip=\"http://schemas.thomson.com/ts/20041221/tsip\">");
        String xmlFrag = new String(Files.readAllBytes(Paths.get("C:/myFileName")));
        sb.append(xmlFrag);
        sb.append("</tag>");
        Builder parser = new Builder();
        Document doc = parser.build(sb.toString(), null);
        Element wrapperRoot = doc.getRootElement();
        Element realRoot = root.getFirstChildElement("publications");