2013-06-24 118 views
2

我正在嘗試編輯一個xml文件。如何修改xml內部屬性

XmlDocument myXmlDocument = new XmlDocument(); 
myXmlDocument.Load(@"C:\\Users\\Vahid\\Desktop\\HG\\HG\\HG\\singleM.kml"); 
XmlNode myNode = myXmlDocument.SelectSingleNode(
    "/kml/Document/Placemark/Point/coordinates"); 
myNode.Value = coordinates; 
myXmlDocument.Save(@"C:\\Users\\Vahid\\Desktop\\HG\\HG\\HG\\singleM.kml"); 

,這是我的XML(.KML)文件:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" 
    xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> 
<Document> 
    <name>change.kml</name> 
    <Style id="sn_ylw-pushpin"></Style> 
    <Placemark> 
    <Point> 
     <coordinates>0, 0,0</coordinates> 
    </Point> 
    <name>12</name> 
</Placemark> 
</Document> 
</kml> 
+0

您是否需要使用XmlDocument?你完全可以使用XmlDocument來處理這個問題(問題出在命名空間中),但是LINQ to XML是一個更現代化的API。 –

+0

任何想法與我的代碼? –

+0

Marc的代碼對我來說看起來很好。但如果可能的話,我仍然鼓勵你使用LINQ to XML。 –

回答

0

XML命名空間:

XmlNamespaceManager ns = new XmlNamespaceManager(myXmlDocument.NameTable); 
ns.AddNamespace("kml", "http://www.opengis.net/kml/2.2"); 
XmlNode myNode = myXmlDocument.SelectSingleNode("/kml:kml/kml:Document/kml:Placemark/kml:Point/kml:coordinates", ns); 
myNode.InnerText = coordinates; 

注意,並沒有什麼特別之處"kml"/"kml:"在這裏 - 它可能只是以及:

XmlNamespaceManager ns = new XmlNamespaceManager(myXmlDocument.NameTable); 
ns.AddNamespace("x", "http://www.opengis.net/kml/2.2"); 
XmlNode myNode = myXmlDocument.SelectSingleNode("/x:kml/x:Document/x:Placemark/x:Point/x:coordinates", ns); 
myNode.InnerText = coordinates; 

重要的一點是你的每個元素都在命名空間http://www.opengis.net/kml/2.2; AddNamespace只是爲此添加了一個別名,以便我們可以方便地討論名稱空間 - 然後我們使用別名編寫xpath,並將名稱空間管理器傳遞給SelectSingleNode方法。

+0

它不工作我的錯誤是: 對象引用未設置爲對象的實例。 In Line:myNode.Value = coordinates; myNolde爲NULL! –

+0

@VahidNazakTabar我檢查了你發佈的XML ...它工作正常;節點肯定不是'null'。請檢查您是否準確複製了該行。 –

+0

@VahidNazakTabar注意*您必須使用'.InnerText',而不是'.Value' - 但這是唯一的其他更改 –