简体   繁体   中英

How to append ChildNodes of a xml documents into root of another (web services)?

I've created a [WebMethod] on ASP.NET Web Service which reads XML documents from different web services (ASP.NET and PHP services).

Once the documents are read, they are merged into a XML and returned.

The method can successfully read XML documents from each web service but when I try to append second XML into first one, I get ArgumentException and a message like this The node to be inserted is from a different document context. I can't find a problem, can it be something to do with the source of document? but then both document are exactly same (have same elements).

Why ArgumentException ? What am I missing?

[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;
}  

您需要使用importNode()导入节点,如下所示:

xmlDom1.DocumentElement.importNode(xmlNode, true);

Can you write it like this?

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;
}  

The real trick is getting your custom getRestaurantFromAspNetWS function to return a XElement instead of a XmlDocument, as you didn't provide us with that function, I can't help you there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM