2016-04-03 18 views
1

私はC#を使用してウェブサイトのXMLファイルにURLを追加します。
私はすでにWebサイトのルートにXMLファイルを作成しています。 xmlファイルの内容は次のとおりです。
Asp.netとC#を使用してネストされたXMLノードをxmlファイルに追加

<?xml version="1.0" encoding="utf-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9&#xD;&#xA;http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
     <url> 
     <loc>http://www.structure.com/Structure.aspx?id=1</loc> 
     </url> 
</urlset> 

は、今私はxmlファイルに<loc>ノードで新しい<url>ノードを追加したいと私は

<?xml version="1.0" encoding="utf-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9&#xD;&#xA;http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
     <url> 
     <loc>http://www.structure.com/Structure.aspx?id=1</loc> 
     </url> 
     <url> 
     <loc>http://www.structure.com/Structure.aspx?id=2</loc> 
     </url> 
</urlset> 

のようなXMLコンテンツの変更をしたい私は、関数が作製してみてくださいWebフォームからURL文字列を取得し、それがaspのトリガです:Buttonクリック

protected void Button1_Click(object sender, EventArgs e) 
    { 
     insertSiteMap("http://www.structure.com/Structure.aspx?id=2"); 
    } 

と機能は次のとおりです。

private void insertSiteMap(string pageurl) 
    { 
     //Load XML Schema 
     System.Xml.XmlDocument originalXml = new System.Xml.XmlDocument(); 
     originalXml.Load(Server.MapPath("../sitemap.xml")); 
     XmlElement URL = originalXml.CreateElement("url"); 

     XmlElement LOC = originalXml.CreateElement("loc"); 
     XmlText LOCText = originalXml.CreateTextNode(pageurl); 
     LOC.AppendChild(LOCText); 

     URL.AppendChild(LOC); 

     XmlNode newUrl = originalXml.GetElementsByTagName("url")[0]; 
     originalXml.DocumentElement.PrependChild(newUrl); 

     originalXml.Save(Server.MapPath("../sitemap.xml")); 
    } 

私はすべてのエラーを持っていないとVisual Studioのメッセージ私のxmlファイルが変更されているが、私は、ファイルを開くと、XMLファイルには変更がある:(。
どこが間違っていますか?

答えて

3

変数URLを使用して新しい要素を作成したら、たとえば次のように挿入する必要があります。 originalXml.DocumentElement.AppendChild(URL);

ただし、元のXMLでは名前空間を使用していますが、C#コードでは名前空間に新しいXmlElementsが作成されるため、要素の作成も修正する必要があります。

XmlElement url = originalXml.CreateElement("url", originalXml.DocumentElement.NamespaceURI); 
XmlElement loc = originalXml.CreateElement("loc", originalXml.DocumentElement.NamespaceURI); 
loc.InnerText = pageurl; 
url.AppendChild(loc); 
originalXml.DocumentElement.AppendChild(url); 
関連する問題