Я хочу отредактировать мой xml файл - PullRequest
1 голос
/ 15 ноября 2009

Привет! Я работаю над XML-файлом, здесь я хочу предоставить пользователю права на редактирование узлов моего xml-файла на его собственный язык.

Я прилагаю свой код, но он не редактирует мой XML-файл. Нужна помощь.

class Program
{
    static void Main(string[] args)
    {
        //The Path to the xml file   
        string path = "D://Documents and Settings//Umaid//My Documents//Visual Studio 2008//Projects//EditXML//EditXML//testing.xml";

        //Create FileStream fs  
        System.IO.FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

        //Create new XmlDocument       
        System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
        //Load the contents of the filestream into the XmlDocument (xmldoc) 
        xmldoc.Load(fs);
        //close the fs filestream            
        fs.Close();
        //Change the contents of the attribute        
        xmldoc.DocumentElement.ChildNodes[0].Attributes[0].InnerText = "Umaid";

        // Create the filestream for saving      
        FileStream WRITER = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);

        // Save the xmldocument      
        xmldoc.Save(WRITER);
        //Close the writer filestream 
        WRITER.Close();

    }
}

Мой XML-файл, который я собираюсь редактировать, но не смог.

    <?xml version="1.0" encoding="utf-8" ?>
<rule id="city" scope="public">
  <one-of>
    <item>Boston</item>

  </one-of>
</rule>

Ответы [ 2 ]

1 голос
/ 15 ноября 2009

Что вы действительно хотите сделать со своим XML? Какой атрибут вы хотите изменить ??

Один совет: вы можете загрузить и сохранить XmlDocument непосредственно в путь - нет необходимости в файловом потоке .....

xmldoc.Load(@"D:\yourpath\file.xml");

xmldoc.Save(@"D:\yourpath\newfile.xml");

Проблема в том, что ваше выражение xmldoc.DocumentElement.ChildNodes[0] выбирает узел <one-of>, который не имеет атрибутов.

Вы не можете изменить несуществующий атрибут.

Если вы хотите изменить атрибут «id» <rule>, вам нужно сделать это в DocumentElement:

xmldoc.DocumentElement.Attributes["id"].Value = "Umaid";

Если вы хотите изменить текст внутри <item>, сделайте следующее:

XmlNode itemNode = xmldoc.SelectSingleNode("/rule/one-of/item");
if(itemNode != null)
{
   itemNode.InnerText = "Umaid";
}

Марк

0 голосов
/ 15 ноября 2009
class Program
{
    static void Main(string[] args)
    {
        string path = "D:\\Documents and Settings\\Umaid\\My Documents\\Visual Studio 2008\\Projects\\EditXML\\EditXML\\testing.xml";
        XmlDocument doc = new XmlDocument();
        doc.Load(path);
        var itemNode = doc.SelectSingleNode("rule/one-of/item");
        if (itemNode != null)
        {
            itemNode.InnerText = "Umaid";
        }
        doc.Save(path);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...