我想使用java将导入语句添加到现有的schema/xsd文件中,我们是否可以将它们添加到xsd中?,我确实尝试如下,但出现错误:“org.w3c.dom.DOMException:HIERARCHY_REQUEST_ERR:An尝试在不允许的位置插入节点。”
架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- ommitted rest of the content-->
</xs:schema>
想要添加如下导入:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="myownLocation"/>
<!-- ommitted rest of the content-->
</xs:schema>
我使用了以下逻辑,但失败并出现错误:
org.w3c.dom.DOMException:HIERARCHY_REQUEST_ERR:尝试在不允许的位置插入节点。
Document doc = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new FileInputStream("testXSD.xml"));
Element blobKey_E = doc.createElement("xs:import");
blobKey_E.setAttribute("namespace", "http://www.w3.org/2000/09/kk#");
blobKey_E.setAttribute("schemaLocation", "myownLocation");
doc.appendChild(blobKey_E);
TransformerFactory
.newInstance()
.newTransformer()
.transform(new DOMSource(doc.getDocumentElement()), new
StreamResult(System.out));
您的问题是,您尝试将
xs:import
元素附加到根节点(它是 xs:schema 的父节点),并且会创建两个文档元素。根节点的概念可能看起来令人困惑,您可能期望它是 xs:schema
,但请记住,您可以有其他顶级节点,例如注释或处理指令 - 但您只能将一个 XML 元素作为根节点。
相反,请使用
xs:schema
选择文档元素(即
doc.getDocumentElement()
元素),然后将 xs:import
元素附加到其中:
Element root = doc.getDocumentElement();
root.appendChild(blobKey_E);