2012-03-30 1 views
0

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

После того, как документы будут прочитаны, они будут объединены в 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; 
} 
+0

У вас есть * использовать XmlDocument вместо LINQ to XML? –

+0

Я бы предпочел использовать XmlDocument, но я открыт для изучения новых идей. Не могли бы вы указать, что читать? Вы видите проблему с кодом выше? –

+0

Вы должны посмотреть на 'XmlDocument.ImportNode', но я бы * сильно * призываю вас взглянуть на LINQ to XML. Это * значительно улучшенный XML API. –

ответ

1

Вы должны импортировать узел с importNode() что-то вроде этого:

xmlDom1.DocumentElement.importNode(xmlNode, true); 
0

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

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, так как вы не предоставили нам с этой функцией, я не могу вам помочь.