如何使用java将语句导入添加到xml(架构/xsd)

问题描述 投票:0回答:1

我想使用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)); 
java xml xsd xml-parsing saxon
1个回答
0
投票

您的问题是,您尝试将

xs:import
元素附加到根节点(它是 xs:schema 的父节点),并且会创建两个文档元素。根节点的概念可能看起来令人困惑,您可能期望它是
xs:schema
,但请记住,您可以有其他顶级节点,例如注释或处理指令 - 但您只能将一个 XML 元素作为根节点。

相反,请使用

xs:schema
 选择文档元素(即 
doc.getDocumentElement()
元素),然后将
xs:import
元素附加到其中:

Element root = doc.getDocumentElement();
root.appendChild(blobKey_E);
© www.soinside.com 2019 - 2024. All rights reserved.