Рейтинг:
1
Jochen Arndt
string selectedFile = richTextBox1.Text;
XmlDocument doc = new XmlDocument();
doc.Load(selectedFile); // --> error message
Вы получаете имя файла из элемента управления RichText, который содержит недопустимое имя файла.
Я не знаю, какое имя файла вы хотите использовать, но похоже, что вам нужно сохранить выбранное имя файла где-то, чтобы использовать его вместо содержимого файла, загруженного в поле RichText.
AAB40
привет Йохен, мне нужно содержимое xml-файла, а не название xml-файла или заголовок. Речь идет о чтении содержимого выбранного мной файла и изменении в нем некоторого содержимого. Как вы выясните, что это имя файла из элемента управления RichtText, который я получаю, пожалуйста? Потому что я не вижу его нигде в сообщении об ошибке.???
Jochen Arndt
Видишь https://msdn.microsoft.com/en-us/library/875kz807(v=против 110). aspx:
XmlDocument.Метод Загрузки (Строка)
Загружает XML-документ с указанного URL-адреса.
Строку, переданную в метод load() должен быть действительный URL-адрес / имя файла.
Вы передаете содержимое файла, который был загружен в поле RichText:
richtextbox1 отображение.Командами(openFileDialog1.Имя файла, richTextBoxStreamType.открытый текст);
Если вы хотите прочитать содержимое файла как XmlDocument сохраните имя файла и используйте его:
// string selectedFile является членом
selectedFile = openFileDialog1.имя файла;
AAB40
ну ладно, спасибо. Теперь, все еще кувыркаясь над doc. LoadXml(selectedFile); но на этот раз он говорит, что первая строка моего XML неправильна, если я правильно ее понимаю: "данные на корневом уровне недопустимы. Строка 1, Позиция 1. " Мой xml-файл начинается с "<? xml version="1.0"?>". Я помню, что где-то читал это, но больше не могу найти. у вас есть идея, пожалуйста?
Jochen Arndt
В XML версии 1.0 эта строка заголовка рекомендуется, но необязательна.
В XML версии 1.1 требуется заголовок версии.
Для тестирования я предлагаю использовать мое решение чтения из файла. Это гарантирует, что содержимое не будет изменено при чтении содержимого в поле RichText.
Я не совсем уверен, как ведет себя RichText при чтении простых текстовых файлов. Но обычный элемент управления редактированием преобразует текст в Юникод (широкую строку), который, вероятно, не будет понят читателем XML, если он не вставит спецификацию. Если вы не знаете, о чем я говорю, просто попробуйте прямую загрузку из файла. Если это сработает, я был прав, и мы/вы должны найти решение этой проблемы. Решение зависит от того, что Вы, наконец, хотите сделать.
AAB40
Йохен, я уже это сделал. Вот где я получил сообщение об ошибке в первой строке:
// Чтение выбранного файла
строка selectedFile = openFileDialog1.имя файла;
XmlDocument doc = новый XmlDocument();
doc. LoadXml(selectedFile);
// найдите узел для изменения содержимого
//если узла нет, ничего не делайте
по каждому элементу (xNode руководство в DOC)
{
if (xNode.ParentNode.Атрибуты [ " *.*"]. Value != "")
{
док.SelectSingleNode ("Идентификация").InnerText = " строка";
док.SelectSingleNode ("ServiceComponentIdentification").InnerText = " строка";
док.SelectSingleNode ("ReferenceType").InnerText = " строка";
док.SelectSingleNode ("CostCategoryType").InnerText = " AA";
}
else { } / / ничего не делать
}
Jochen Arndt
Теперь вы используете LoadXml() с именем файла, которое, конечно же, не является допустимым XML.
Воспользуйся:
строка selectedFile = openFileDialog1.имя файла;
XmlDocument doc = новый XmlDocument();
док.Нагрузки(selectedFile); // загрузить() вот!
и убедитесь, что openFileDialog1.FileName содержит допустимое имя файла (или используйте жесткое кодовое имя для тестирования).
AAB40
ой... Я думаю, что мы неправильно понимаем друг друга, Йохен. цель состоит в том, чтобы автоматически сделать все положительные xml-файлы отрицательными. Таким образом, название должно оставаться прежним + "-NEG" в конце. Несколько внутренних текстов из узлов из файла, который я загрузил, должны измениться автоматически (с помощью кода). Поэтому я не могу использовать имя файла спуска, так как заголовок каждый раз отличается, каждый раз с каждым xml-файлом, который я выбираю.
Jochen Arndt
Я просто сосредотачиваюсь на реальной проблеме чтения XML-файла.
Просто забудьте на данный момент, что Вы, наконец, хотите сделать с несколькими файлами. Разбейте задачи на отдельные.
Первая задача-чтение контента без ошибок. Для этого вы можете создать образец XML-файла для тестирования (и использовать это имя "жестко закодировано" в вашем исходном коде, чтобы вам не приходилось выбирать файл вручную каждый раз, когда вы его тестируете).
После успешной загрузки файла следующая задача-обработка / изменение файла.
Затем сохраните файл с новым именем, добавив "- NEG".
Последняя задача-сделать это для нескольких / выбранных файлов. Теперь вы можете удалить фиксированное имя и использовать диалоговое окно файла или что-то еще, что требуется.
Все мои комментарии здесь-это предложения, чтобы узнать, что происходит. Они не предназначены для использования в конечном приложении.
AAB40
Йохен, я изменил свой код, чтобы изменить файл следующим образом:
// Чтение выбранного файла
строка selectedFile = @"C:\Users\decraiec\Documents\Visual Studio 2015\проекты\XML testversion.xml";
XmlDocument doc = новый XmlDocument();
doc. Load(selectedFile);
// найдите узел для изменения содержимого
//если узла нет, ничего не делайте
по каждому элементу (xNode руководство в DOC)
{
if (xNode.ParentNode.Атрибуты["*.*"].Значение != "") ==&ГТ; ошибка
{
док.SelectSingleNode ("Идентификация").InnerText = " строка";
док.SelectSingleNode ("SCI").InnerText = " строка";
док.SelectSingleNode ("ReferenceType").InnerText = " строка";
док.SelectSingleNode ("CCType").InnerText = " AA";
}
else { } / / ничего не делать
}
и теперь приложение говорит, что "объект не установлен в экземпляр ..." в строке
if (xNode.ParentNode.Атрибуты["*.*"].Значение != "").
Jochen Arndt
Как видите, решение проблем шаг за шагом имеет смысл.
Какая-то часть
xNode.ParentNode.Атрибуты [ " *.*"]. Value != ""
не существует.
Я немного не разбираюсь в XML-синтаксисе, поэтому не знаю немедленного ответа. Позже вы также используете определенные имена узлов, которые требуют знания вашей структуры XML-файла.
Но я предлагаю поставить для этого новый вопрос, потому что он больше не связан с первоначальными вопросами. Это имеет некоторые преимущества:
- Больше людей увидят новый вопрос и смогут помочь
- Длинные темы комментариев трудно читать
- Использование вопросов и решений обеспечивает лучшее удобство использования, чем комментарии
Рейтинг:
0
F-ES Sitecore
doc.Load(selectedFile);
Load используется для загрузки XML из файла. Если у вас есть xml в переменной, которую вы хотите затем использовать (что у вас есть), то вместо этого используйте LoadXml
doc.LoadXml(selectedFile);
AAB40
Привет F-ES, спасибо за ваше решение, которое работает, чтобы передать эту строку кода, но теперь c sharp говорит мне, что я должен использовать " new " для XmlNode. К вашему сведению: тем временем я немного изменил свой код.
doc. LoadXml(selectedFile);
// найдите узел для изменения содержимого
//если узла нет, ничего не делайте
по каждому элементу (xNode руководство в DOC)
{
if (xNode.ParentNode.Атрибуты [ " *.*"]. Value != "")
{
док.SelectSingleNode ("Идентификация").InnerText = " строка";
док.SelectSingleNode ("ServiceComponentIdentification").InnerText = " строка";
док.SelectSingleNode ("ReferenceType").InnerText = " строка";
док.SelectSingleNode ("CostCategoryType").InnerText = " AA";
}
else { } / / ничего не делать
}