Методы CreateAttribute генерируют исключение System.NotSupportedException - PullRequest
0 голосов
/ 20 января 2012
    public void AddNodeToXml(string helpid, string fileName)
    {
        const string STR_EXPRESSION = "/Form/Controls/Control";
        XPathDocument doc = null;

        try
        {
            doc = new XPathDocument(fileName);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

        if (doc != null)
        {
            XPathNavigator navigator = doc.CreateNavigator();
            XPathNodeIterator localIterator = navigator.Select(STR_EXPRESSION);

            while (localIterator.MoveNext())
            {
                if (localIterator.Current != null)
                {
                    if (localIterator.Current.Name.Equals("Control"))
                    {
                        localIterator.Current.MoveToFirstAttribute();
                        if (localIterator.Current.Value.Equals(helpid))
                        {
                            localIterator.Current.MoveToParent();
                            localIterator.Current.CreateAttribute(string.Empty, "NewAttribute", string.Empty, "value");
                        }
                    }
                }
            }
        }
    }

Моя структура XML такая же, как в STR_EXPRESSION Я хочу добавить новый атрибут в управляющий узел, если значением атрибута имени currnet cotrol является «helpid», я пытался использовать метод CreateAttribute (), но он выдает исключение как System.NotSupportedException.

1 Ответ

1 голос
/ 20 января 2012

это было бы намного проще с Linq to XML, есть ли причина, по которой вы его не используете?

Это непроверенный код, который я написал на макушке, но он должен быть довольно близко, он показывает, как вы будете использовать Linq для решения той же проблемы:

XElement root = XDocument.Load(fileName).Root; //get the root element of the XML document
foreach (var controlElement in root.Descendants("Control").Where(c=>c.Attributes[0] != null && c.Attributes[0].value == helpId)) //get all of the control elements with the appropriate helpid value
{
   if (controlElement.Parent == null) continue; // it's always good to be defensive

   controlElement.Parent.Attributes.Add("NewAttribute", string.Empty);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...