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