8

xmldocument別の XML でオブジェクトを作成しようとしています

以下のコードを参照してください。

objNewsDoc.LoadXml(strNewsDetail);       // Current XML
XmlDocument docRss = new XmlDocument();  // new Xml Object i Want to create 

XmlElement news = docRss.CreateElement("news");   // creating the wrapper news node
news.AppendChild(objNewsDoc.SelectSingleNode("newsItem")); // adding the news item from old doc

エラー:挿入するノードは別のドキュメント コンテキストからのものです

コードの 1 つの完全なブロックを編集します。

try
{
       XmlDocument objNewsDoc = new XmlDocument();
        string strNewsXml = getNewsXml();
        objNewsDoc.LoadXml(strNewsXml);

        var nodeNewsList = objNewsDoc.SelectNodes("news/newsListItem");
        XmlElement news = docRss.CreateElement("news");
         foreach (XmlNode objNewsNode in nodeNewsList)
         {
               string newshref = objNewsNode.Attributes["href"].Value;
                string strNewsDetail = getNewsDetailXml(newshref);
                 try
                  {
                        objNewsDoc.LoadXml(strNewsDetail);
                         XmlNode importNewsItem = docRss.ImportNode(objNewsDoc.SelectSingleNode("newsItem"), true);
                        news.AppendChild(importNewsItem);
                   }
                    catch (Exception ex)
                    {
                            Console.Write(ex.Message);
                      }

              }

             docRss.Save(Response.Output);
}
catch (Exception ex)
{
      Console.Write(ex.Message);
 }
4

1 に答える 1

11

Import Nodeメソッドを使用して、XmlNodeを最初のドキュメントから2番目のドキュメントのコンテキストにインポートする必要があります。

objNewsDoc.LoadXml(strNewsDetail);       // Current XML
XmlDocument docRss = new XmlDocument();  // new Xml Object i Want to create 

XmlElement news = docRss.CreateElement("news");   // creating the wrapper news node
//Import the node into the context of the new document. NB the second argument = true imports all children of the node, too
XmlNode importNewsItem = docRss.ImportNode(objNewsDoc.SelectSingleNode("newsItem"), true);
news.AppendChild(importNewsItem); 

編集

あなたはあなたの答えに非常に近いです、あなたが今持っている主な問題はあなたがあなたの主な文書にあなたのニュース要素を追加する必要があるということです。出力ドキュメントを次のようにする場合は、次のようにすることをお勧めします。

<news>
  <newsItem>...</newsItem>
  <newsItem>...</newsItem>
</news>

新しいXmlElement、ニュースを作成するのではなく、代わりにdocRSSを作成するときに、次のようにします。

XmlDocument docRss = new XmlDocument();
docRss.LoadXml("<news/>");

これで、次のようなXmlDocumentが作成されました。

<news/>

次に、ではなくnews.AppendChild、単純に:

docRSS.DocumentElement.AppendChild(importNewsItem);

これにより、要素(この場合はドキュメント要素)のnewsItem下にそれぞれが追加されます。news

于 2012-10-15T11:51:31.903 に答える