Как добавить ChildNodes XML-документов в корень другого (веб-сервисы)? - PullRequest
0 голосов
/ 30 марта 2012

Я создал [WebMethod] в веб-службе ASP.NET, которая считывает документы XML из различных веб-служб (служб ASP.NET и PHP).

После прочтения документов они объединяются вXML и вернулся.

Метод может успешно читать XML-документы из каждого веб-сервиса, но когда я пытаюсь добавить второй XML в первый, я получаю ArgumentException и такое сообщение The node to be inserted is from a different document context. Я не могу найти проблему,это может быть что-то делать с источником документа?но тогда оба документа абсолютно одинаковы (имеют одинаковые элементы).

Почему ArgumentException?Чего мне не хватает?

[WebMethod]
public XmlDocument getRestaurants(String search_keywords)
{
  XmlDocument xmlDom1 = new XmlDocument();
  xmlDom1 = getRestaurantFromAspNetWS(search_keywords);

  XmlTextReader myXmlTextReader = 
  new XmlTextReader
  ("http://some-iss.green.com/username/search.php?s=" + search_keywords);

  XmlDocument xmlDom2 = new XmlDocument();
  xmlDom2.Load(myXmlTextReader);

  foreach (XmlElement xmlNode in xmlDom2.DocumentElement.ChildNodes)
  {
     //trying to append childNodes of xmlDom2 into xmlDom1 
     //and this is where i get ArgumentException
     xmlDom1.DocumentElement.AppendChild(xmlNode);
  } 

  return xmlDom1;
}  

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вам необходимо импортировать узел с помощью importNode () как то так:

xmlDom1.DocumentElement.importNode(xmlNode, true);
0 голосов
/ 02 апреля 2012

Вы можете написать это так?

public XElement getRestaurants(String search_keywords)
{
    XElement result = getRestaurantFromAspNetWS(search_keywords);

    XmlTextReader myXmlTextReader = new XmlTextReader
        ("http://some-iss.green.com/username/search.php?s=" + search_keywords);

    XElement reader = XElement.Load(myXmlTextReader);
    foreach (XElement child in reader.Elements())
        result.Add(child);

    return result;
}  

Реальный трюк заключается в том, чтобы ваша пользовательская функция getRestaurantFromAspNetWS возвращала XElement вместо XmlDocument, поскольку вы не предоставили нам эту функцию, я не могу вам помочь.*

...