Ваш образец XML является недействительным, как показано на рисунке. Префикс my
не определен в XML.
Если ваш XML содержит xmlns:my="schemas.microsoft.com/office/infopath/2003/myXSD/…"
, тогда XML, по крайней мере, надеется, что он будет действительным.
Для управления XML с пространствами имен в коде .NET рассмотрите возможность использования Linq XDocument
вместо XmlDocument
. Я обнаружил, что типы Linq's XNamespace
и XName
намного проще в использовании с классом классов XDocument
, чем старый стиль XmlDocument
- довольно неуклюжая обработка пространств имен.
Изменение XML, чтобы добавить атрибут xmlns:my
к корневому элементу:
<my:MNO xmlns:my="schemas.microsoft.com/office/infopath/2003/myXSD/…" my:NoOfAutho="16" etc... >
В коде C# добавить ссылку на материал Linq в верхней части исходного файла:
using System.Xml.Linq;
Затем используйте код, подобный этому (не проверенный, может содержать опечатки синтаксиса) для загрузки xml и доступа к элементу:
XNamespace ns = "schemas.microsoft.com/office/infopath/2003/myXSD/…";
XName MNO_Name = ns + "MNO";
XDocument doc = XDocument.Load(path2);
XElement MNO_Element = doc.Root.Descendants(MNO_Name).Single();
Затем вы можете читать или изменять свойства, атрибуты и дочерние элементы элемента MNO.
Для считывания значения <MNO>100</MNO>
используйте MNO_Element.Value
.
Чтобы записать новое значение элемента, присвоить свойству значение: MNO_Element.Value = "120";
.Single()
утверждает, что существует ровно один узел, который соответствует критериям отбора, похожие на .SelectSingleNode()
функции XmlDocument
.
Как видно из этого кода, имя префикса «my» в XML-документе не имеет значения для кода, обрабатывающего XML - это URI, который представляет собой «мой» префикс, что является важным , Префикс является просто сокращенным, поэтому писателю XML не нужно писать длинные и трудоемкие URI везде.
Написание кода обработки XML, являющегося агностиком префикса пространства имен XML, очень важно, поскольку имя префикса может (и будет) варьироваться от одного документа XML до следующего, но URI пространства имен будет таким же.
Возможно, вы захотите ознакомиться с [пространствами имен XML] (http://en.wikipedia.org/wiki/XML_namespace). –
Пожалуйста, покажите код, который вы используете сейчас. Кроме того, FYI, это не имена, содержащие «:». Это имена с префиксами пространства имен. –
XmlDocument xmlDoc = новый XmlDocument(); xmlDoc.Load (file.xml); XmlNode node = xmlDoc.SelectSingleNode ("ECR/Type"); node.Attributes [0] .Value = "XYZ"; xmlDoc.Save (file.xml); – Waleed