Getting org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR 添加根节点到文档
Getting org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR adding root node to document
我正在尝试创建一个简单的 XML 文档,但在将根元素添加到文档时收到上述错误。我只有一个根元素(为文档创建的第一个元素)并且在第一次 append_child() 调用时抛出错误。这是导致错误抛出位置的代码(在 securityDoc.appendChild(securityDoc) 调用中):
public Document CreateSecurityHeader() throws ParserConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document securityDoc = builder.newDocument();
try {
Element securityRoot = securityDoc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Security");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:env", "http://www.w3.org/2003/05/soap-envelope");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wss","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
securityRoot.setAttribute("env:mustUnderstand", "1");
securityDoc.appendChild(securityDoc);
因为这是该文档中目前唯一的元素,我怎么会收到这个错误?我确实不得不引入 xalan 和 xerces 库作为这个项目的依赖项来做其他事情,这里会不会不兼容?
哎呀。您将 securityDoc
附加到 securityDoc
.
securityDoc.appendChild(securityDoc);
我确定你是这个意思:
securityDoc.appendChild(securityRoot);
我自己是通过逐步验证代码才注意到这一点的,当它使用节点查找表检查建议的树结构是否合法时,我看到你附加的是 DOCUMENT_NODE
,这是附加到 DOCUMENT_NODE
.
是不合法的
我正在尝试创建一个简单的 XML 文档,但在将根元素添加到文档时收到上述错误。我只有一个根元素(为文档创建的第一个元素)并且在第一次 append_child() 调用时抛出错误。这是导致错误抛出位置的代码(在 securityDoc.appendChild(securityDoc) 调用中):
public Document CreateSecurityHeader() throws ParserConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document securityDoc = builder.newDocument();
try {
Element securityRoot = securityDoc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Security");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:env", "http://www.w3.org/2003/05/soap-envelope");
securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wss","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
securityRoot.setAttribute("env:mustUnderstand", "1");
securityDoc.appendChild(securityDoc);
因为这是该文档中目前唯一的元素,我怎么会收到这个错误?我确实不得不引入 xalan 和 xerces 库作为这个项目的依赖项来做其他事情,这里会不会不兼容?
哎呀。您将 securityDoc
附加到 securityDoc
.
securityDoc.appendChild(securityDoc);
我确定你是这个意思:
securityDoc.appendChild(securityRoot);
我自己是通过逐步验证代码才注意到这一点的,当它使用节点查找表检查建议的树结构是否合法时,我看到你附加的是 DOCUMENT_NODE
,这是附加到 DOCUMENT_NODE
.