2016-10-12 40 views
0

基於raml21.xsd模式的xml文件中更改元素的值是我想要更新的xml文件(例如 - 更改日誌元素中的dateTime屬性)。在asp.net

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<raml xmlns="raml21.xsd" version="2.1"> 
    <cmData id="3221225472" scope="all" type="plan"> 
    <header> 
     <log action="created" appInfo="Nokia BTS Site Manager" appVersion="FL16" dateTime="2016-09-23T17:59:59" user="BTSSM"/> 
    </header> 
    </cmData> 
</raml> 

這裏是我的代碼:

filePath = openFileDialogXml.FileName; 
XmlDocument document = new XmlDocument(); 
document.Load(filePath); 
XmlElement node1 = document.SelectSingleNode("/header/log") as XmlElement; 
if (node1 != null) 
{ 
    node1.Attributes[3].Value = "test"; 
} 
document.Save(filePath); 

但是,問題是:節點1總是空。我現在問題導致此行在xml文件中:

raml xmlns="raml21.xsd" version="2.1" 

回答

0

您需要在查找元素時考慮命名空間。並在XPath中包含目標和根目錄之間的所有元素

使用SelectSingleNode的過載,該過載需要XmlNamespaceManager,後者已配置後者以包含所需的名稱空間。

喜歡的東西:

XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable); 
mgr.AddNamespace("x", "raml21.xsd"); 
var node1 = document.SelectSingleNode("/x:raml/x:cmData /x:header/x:log", mgr) as XmlElement; 
+0

它的工作現在。非常感謝。 – Zoc