Member 11403304 Ответов: 2

Как добавить элемент из одного XML-документа в другой XML-документ?


У меня возникли проблемы с добавлением элемента CitationDocumentBatch, который находится в этом объекте objXMLInputDoc. Я хочу добавить его к этому объекту objXMLCopyOfOriginalInputDoc. Он должен быть добавлен как дочерний элемент <soapenv:body> внутри objXMLCopyOfOriginalInputDoc.

объект objXMLInputDoc содержит следующее
<CitationDocumentBatch schemaVersion="3:5" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.courts.state.mn.us/CourtXML/3 file:///H:/Deve/Schemas/CourtXML/CitationDocument_3_5.xsd">
	<CitationDocument>
		<Citation>
	</CitationDocument>
</CitationDocumentBatch>


objXMLCopyOfOriginalInputDoc содержит следующее
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
	<soap:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	</soap:Header>
	<soapenv:Body>
	<!--Add or insert CitationDocumentBatch element here-->
	</soapenv:Body>
</soapenv:Envelope>


Результат, который я хочу получить, будет в objXMLCopyOfOriginalInputDoc, который после вставки/добавления CitationDocumentBatch из objXMLInputDoc будет выглядеть следующим образом
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
	<soap:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	</soap:Header>
	<soapenv:Body>
	<CitationDocumentBatch schemaVersion="3:5" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.courts.state.mn.us/CourtXML/3 file:///H:/Deve/Schemas/CourtXML/CitationDocument_3_5.xsd">
	<CitationDocument>
		<Citation>
	</CitationDocument>
</CitationDocumentBatch>
	</soapenv:Body>
</soapenv:Envelope>


Я пытаюсь это сделать vb.net но я получаю исключение "Узел, который будет вставлен, находится в другом контексте документа."
[код]objXMLCopyOfOriginalInputDoc.DocumentElement.SelectSingleNode("soap:Body", objXMLNameSpaceManager).AppendChild(objXMLInputDoc.SelectSingleNode("//CitationDocumentBatch"))

Может ли кто - нибудь помочь мне с этим? Это может быть очень легко, но я не в состоянии понять это.

Что я уже пробовал:

Я устал от этого, но я получаю исключение
objXMLCopyOfOriginalInputDoc.DocumentElement.SelectSingleNode("soap:Body", objXMLNameSpaceManager).AppendChild(objXMLInputDoc.SelectSingleNode("//CitationDocumentBatch"))

Richard MacCutchan

Ссылка на объект "я получаю исключение "не установлена на экземпляр объекта.""
Вам нужно использовать свой отладчик, чтобы выяснить, почему эта ссылочная переменная является нулевой, а не допустимой ссылкой.

Member 11403304

На самом деле исключение составляет "вставляемый узел находится в другом контексте документа"

2 Ответов

Рейтинг:
19

Keviniano Gayo

Вам нужно импортировать узел.

XmlNode node = objXMLInputDoc.SelectSingleNode("//CitationDocumentBatch");

XmlNode copiedNode = objXMLCopyOfOriginalInputDoc.OwnerDocument.ImportNode(node, true); //needs to import node, true = if you want deep copy


objXMLCopyOfOriginalInputDoc.DocumentElement.SelectSingleNode("soap:Body", objXMLNameSpaceManager).AppendChild(copiedNode);


Member 11403304

что это такое для var node =? Когда я превращу его в vb.net Dim node As var = я получаю ошибку для var, что "тип var не определен".

Keviniano Gayo

Узел руководство...

Рейтинг:
1

Member 11403304

Мне больше не нужна помощь. Я использовал метод "ImportNode" для XmlDocument

objXMLCopyOfOriginalInputDoc.DocumentElement.SelectSingleNode("soap:Body", objXMLNameSpaceManager).AppendChild(objXMLCopyOfOriginalInputDoc.ImportNode(objXMLInputDoc.SelectSingleNode("//CitationDocumentBatch"), True))