在c#中获取一个具有特定属性值的xml元素

本文关键字:属性 元素 xml 一个 获取 | 更新日期: 2023-09-27 18:27:24

我需要获得一个SubTopic元素的值,该元素有一个名为"Name"的attribute,具有特定值。我是这样做的;

 IEnumerable<XElement> list =
        (from el in xdoc.Elements()
         where (string)el.Attribute("Name") == "creatingTests"
         select el);

集合中没有任何元素。

我尝试放置xdoc.Elements("SubTopic")而不是空参数,但没有成功。

我的XML文件结构;

<?xml version="1.0" encoding="windows-1250" ?>
   <Help Title="TestTool - tematy pomocy">
     <Topic Name="creatingTests" Title="Tworzenie testów">
       <SubTopic Name="saveload" Title="Zapis i odczyt z pliku">
          Content
       </SubTopic>
     </Topic>
   </Help>

如何获得帮助/主题(名称="creatingTests")的值?

xdoc当然是加载了xml的XDocument对象,它确实包含了我的文件的内容。

在c#中获取一个具有特定属性值的xml元素

xdoc.Elements()只返回一个元素-XML树的根(在您的示例中是<Help>元素。

将您的查询更改为:

IEnumerable<XElement> list =
    (from el in xdoc.Root.Elements()
     where (string)el.Attribute("Name") == "creatingTests"
     select el);

它返回带有一个元素的集合。使用FirstFirstOrDefault将其作为单个项目而非集合获取:

XElement item = (from el in xdoc.Root.Elements()
                 where (string)el.Attribute("Name") == "creatingTests"
                 select el).FirstOrDefault();

这里有一个使用System.Xml.XXPath:的替代方案

using System.Xml.Linq;
using System.Xml.XPath;
class Program
{
    static void Main(string[] args)
    {
        var xdoc = XDocument.Load("input.xml");
        var subTopic = xdoc
            .XPathSelectElement("//Topic[@Name='creatingTests']/SubTopic");
    }
}

非常简单的方法是使用XSLT。。

1.创建一个XSLT模板。

2.用c#来称呼它。

xmlDaynamic.DocumentContent = "Your XML Input";
xmlDaynamic.TransformSource = "YourTemplate with extension";

3.你的任务完成了。

4.xmlDaynamic是一个服务器控件。

尝试使用XPATH

http://support.microsoft.com/kb/308333

"//Topic[@Name='creatingTests']"