报错
原因
解析XML文档时缺少了对xmi
这个命名空间的声明,没有声明,所以不能直接用。
解决
方式一:单独注册,使用前注册
在解析XML之前,先声明和注册xmi
命名空间。可以使用Namespace
类来定义命名空间,并使用NamespaceStack
类来管理命名空间的声明。
解析xml时
// 设置NamespaceStack对象到SAXReader中
reader.getDocumentFactory().setNamespaceStack(namespaceStack);
// 创建一个NamespaceStack对象来管理命名空间
NamespaceStack namespaceStack = new NamespaceStack();
// 声明和注册xmi命名空间
Namespace xmiNamespace = Namespace.get("xmi", "http://www.omg.org/XMI");
namespaceStack.push(xmiNamespace);
// 设置NamespaceStack对象到SAXReader中
reader.getDocumentFactory().setNamespaceStack(namespaceStack);
Java对象转化xml时
Element element= DocumentHelper.createElement("element");
// 创建一个xmi命名空间
Namespace xmiNamespace = Namespace.get("xmi", "http://www.omg.org/XMI");
// 添加xmi命名空间声明
element.addNamespaceDeclaration(xmiNamespace);
// 在这里进行你的XML生成操作
// 将根元素添加到文档中
elementParent.add(element);
方式二:直接在根上声明
Element root = DocumentHelper.createElement("xmi:XMI");
root.addNamespace("xmi", "http://www.example.com/xmi");
Document document = DocumentHelper.createDocument(root);
其他
命名空间对应地址
soap12
:"http://www.w3.org/2003/05/soap-envelope"
xf
:"http://www.w3.org/2002/xforms"
xi
:"http://www.w3.org/2001/XInclude"
xlink
:"http://www.w3.org/1999/xlink"
xsl
:"ttp://www.w3.org/1999/XSL/Transform"
xs
:"http://www.w3.org/2001/XMLSchema"
xhtml
:"http://www.w3.org/1999/xhtml"
xml
:"http://www.w3.org/XML/1998/namespace"