0

我有一个格式如下的 XML 文件

<ScriptElement>
      <ElementData xsi:type="FirstElement">
         .......
         .......
         .......
         <Description></Description>
         ........ 
      </ElementData>
</ScriptElement>
<ScriptElement>
      <ElementData xsi:type="SecondElement">
         .......
         .......
         .......
         <Description></Description>
         ........ 
      </ElementData>
</ScriptElement>
<ScriptElement>
      <ElementData xsi:type="ThirdElement">
         .......
         .......
         .......
         <Description></Description>
         ........ 
      </ElementData>
</ScriptElement>

我想改变下面InnerTextDescription Nodexsi:type="SecondElement"

当我尝试获取命名空间的属性值时

string attrValist = Doc.SelectSingleNode("ScriptElements/ScriptElement/ElementData/@xsi:type").Value;

MessageBox.Show(attrValist);

我收到一个错误"Namespace Manager or XsIContext needed. The query has a prefix variable or user-defined function"

你能否建议我应该如何前进。

谢谢

4

1 回答 1

1

使用 XML Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication50
{
    class Program
    {
        const string FILENAME = @"c:\temp\test2.xml";
        static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);

            Dictionary<string, XElement> dict = doc.Descendants("ElementData").GroupBy(x => (string)x.Attributes().Where(y => y.Name.LocalName == "type").FirstOrDefault(), z => z)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

            XElement SecondElement = dict["SecondElement"];

            SecondElement.Element("Description").SetValue("abcd");
        }
    }


}
于 2017-04-27T15:06:04.100 回答