как изменить текст в файле XML
От: Sergauskazzz  
Дата: 12.07.07 14:58
Оценка:
Доброго времени суток!

Подскажите, пожалуйста, как изменить текст в файле XML, который лежит на локальном диске, скажем C:\Temp\1.xml?
в технологии XML не силен, а разбираться нет времи, облазил MSDN и тут по поиску, и то что успел нарыть, только запутало...

в общем есть XML, который сформирован на основе шаблона InfoPath:

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.2" productVersion="11.0.8034" PIVersion="1.0.0.0" href="file:///C:\My_projects\InfoPath\test.xsn" name="urn:schemas-microsoft-com:office:infopath:test:-myXSD-2007-07-10T06-28-38" ?><?mso-application progid="InfoPath.Document"?>
<my:Doc xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-07-10T06:28:38" xml:lang="ru">
    <my:str>значение поля</my:str>
    <my:check>false</my:check>
</my:Doc>


Необходимо изменить значение текста в теге <my:str>, скажем на "новое значение",
делаю так:


    string sPath = "C:\Temp\1.xml";

        XmlTextWriter writer = null;
    XmlTextReader txtreader = null;

       reader = new XmlTextReader(sPath);
           writer = new XmlTextWriter (sPath, null);

           while (reader.Read())
           {
              if(txtreader.LocalName == "my:str" )
                 writer.WriteString("НОВОЕ ЗНАЧЕНИЕ");
           }

           writer.Close();
           reader.Close();


но при попытке создать райтер, выдается ошибка — файл уже используется, как можно сделать изменения именно в этом файле?

второй вариант был использовать XmlDocument(), но что-то не понял, как загрузить файл с локального диска


    string sPath = "C:\Temp\1.xml";

        XmlDocument doc = new XmlDocument(); 
        doc.Load(sPath); 
        XmlNode node;
        XmlElement root = doc.DocumentElement;

        node = root.SelectSingleNode("descendant::my:str"); // тут большой вопрос, правильно ли я ищу тег <my:str>? 

        node.InnerText = DateTime.Now.ToString(); 
        doc.Save("sPath");


в этом случае не получается загрузить файл, и собстно потестить поиск атрибута не удалось..
Re: как изменить текст в файле XML
От: Lloyd Россия  
Дата: 12.07.07 15:08
Оценка:
Здравствуйте, Sergauskazzz, Вы писали:

S>второй вариант был использовать XmlDocument(), но что-то не понял, как загрузить файл с локального диска



S>
S>    string sPath = @"C:\Temp\1.xml";

S>        XmlDocument doc = new XmlDocument(); 
S>        doc.Load(sPath); 
S>        XmlNode node;
S>        XmlElement root = doc.DocumentElement;

S>        node = root.SelectSingleNode("//*[local-name() = 'str']"); // тут большой вопрос, правильно ли я ищу тег <my:str>? 

S>        node.InnerText = DateTime.Now.ToString(); 
S>        doc.Save("sPath");
S>


S>в этом случае не получается загрузить файл, и собстно потестить поиск атрибута не удалось..


Попробуй вот так.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: как изменить текст в файле XML
От: Sergauskazzz  
Дата: 13.07.07 06:37
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Попробуй вот так.


S>>
S>>    string sPath = @"C:\Temp\1.xml";

S>>        XmlDocument doc = new XmlDocument(); 
S>>        doc.Load(sPath); 
S>>        XmlNode node;
S>>        XmlElement root = doc.DocumentElement;

S>>        node = root.SelectSingleNode("//*[local-name() = 'str']"); // тут большой вопрос, правильно ли я ищу тег <my:str>? 

S>>        node.InnerText = DateTime.Now.ToString(); 
S>>        doc.Save("sPath");
S>>


Немного подправил, но все равно не получается, это C# скрипт для программы и ее компилятор выдает ошибку в строке doc.Load(sPath); — Ошибка выполнения скрипта:Root element is missing.
что за корневой элемент может имется ввиду?
ошибки в компиляторе программы исключены.

скрипт:


    string sPath = "C:\\Temp\\1.xml"; // для C# вроде так правильнее

        XmlDocument doc = new XmlDocument(); 
        doc.Load(@sPath); 
        XmlNode node;
        XmlElement root = doc.DocumentElement;

        node = root.SelectSingleNode("//*[local-name() = 'str']"); // тут большой вопрос, правильно ли я ищу тег <my:str>? 

        node.InnerText = DateTime.Now.ToString(); 
        doc.Save(@sPath);


И еще такой ворос:
как я понял XmlDocument() используется для небольший файлов XML, для файлов объемом 20-30Kb этот метод будет нормально использовать?
Re[3]: как изменить текст в файле XML
От: Lloyd Россия  
Дата: 13.07.07 08:57
Оценка:
Здравствуйте, Sergauskazzz, Вы писали:

S>Немного подправил, но все равно не получается, это C# скрипт для программы и ее компилятор выдает ошибку в строке doc.Load(sPath); — Ошибка выполнения скрипта:Root element is missing.

S>что за корневой элемент может имется ввиду?
S>ошибки в компиляторе программы исключены.

Сам xml-то покажи.

S>И еще такой ворос:

S>как я понял XmlDocument() используется для небольший файлов XML, для файлов объемом 20-30Kb этот метод будет нормально использовать?

Нормально.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: как изменить текст в файле XML
От: Sergauskazzz  
Дата: 13.07.07 08:59
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Сам xml-то покажи.


Загружаемый XML в первом посте есть
Re[4]: как изменить текст в файле XML
От: Sergauskazzz  
Дата: 13.07.07 09:17
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Сам xml-то покажи.


Вот такой вот XML генерит MS InfoPath, сам по себе он работает, т.е InfoPath его открывает по шаблону test.xsn

а вот в XmlDocument.Load(sPath); не хочет грузится, видимо считается невалидным, сам скрипт загрузки работает, проверил на простом XML..
<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.2" productVersion="11.0.8034" PIVersion="1.0.0.0" href="file:///C:\My_projects\DV\Шаблоны%20InfoPath\test.xsn" name="urn:schemas-microsoft-com:office:infopath:test:-myXSD-2007-07-10T06-28-38" ?><?mso-application progid="InfoPath.Document"?>
<my:Doc xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-07-10T06:28:38" xml:lang="ru">
    <my:str>значение поля</my:str>
    <my:check>false</my:check>
</my:Doc>


Можно ли загрузить исходный XML, игнорируя его ошибки(если даже они там есть)?
Re[5]: как изменить текст в файле XML
От: Lloyd Россия  
Дата: 13.07.07 09:22
Оценка:
Здравствуйте, Sergauskazzz, Вы писали:

S>Здравствуйте, Lloyd, Вы писали:


L>>Сам xml-то покажи.


S>Загружаемый XML в первом посте есть


Убедись, что файл у тебя в utf-8
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: как изменить текст в файле XML
От: Lloyd Россия  
Дата: 13.07.07 09:22
Оценка:
Здравствуйте, Sergauskazzz, Вы писали:

S>Можно ли загрузить исходный XML, игнорируя его ошибки(если даже они там есть)?


Нет
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: как изменить текст в файле XML
От: Sergauskazzz  
Дата: 13.07.07 10:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Sergauskazzz, Вы писали:


S>>Можно ли загрузить исходный XML, игнорируя его ошибки(если даже они там есть)?


L>Нет


Проблема оказалась гараздо проще, у клиента не было доступа в к файлу xsn

<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.2" productVersion="11.0.8034" PIVersion="1.0.0.0" href="file:///C:\My_projects\InfoPath\test.xsn" name="urn:schemas-microsoft-com:office:infopath:test:-myXSD-2007-07-10T06-28-38" ?>
<?mso-application progid="InfoPath.Document"?>



to Lloyd,
Большое спасибо за помощь!
Re[7]: как изменить текст в файле XML
От: Lloyd Россия  
Дата: 13.07.07 11:34
Оценка:
Здравствуйте, Sergauskazzz, Вы писали:

L>>Нет


S>Проблема оказалась гараздо проще, у клиента не было доступа в к файлу xsn


Для того, чтобы загрузить в XmlDocument доступ к этому файлу не нужен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: как изменить текст в файле XML
От: Sergauskazzz  
Дата: 13.07.07 12:44
Оценка:
Здравствуйте, Lloyd, Вы писали:

S>>Проблема оказалась гараздо проще, у клиента не было доступа в к файлу xsn


L>Для того, чтобы загрузить в XmlDocument доступ к этому файлу не нужен.


видимо, не совсем так..
существует шаблон форм InfoPath XSN, на основе которого создаетя XML файл, в котором описывается название поля и его значение


    <my:str>значение поля</my:str>
    <my:check>false</my:check>


а описание полей и свойства формы хранятся в шаблоне формы, для нормального отображения файла XML необходим файл формы, без него XML выдает ошибку и собственно поэтому и не грузился в XMLDcocument
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.