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

时间:2013-08-13 10:20:55

标签: c# xml linq-to-xml

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

 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>

如何获取帮助/主题(Name =“creatingTests”)的值?

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

4 个答案:

答案 0 :(得分:3)

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();

答案 1 :(得分:0)

尝试使用XPATH

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

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

答案 2 :(得分:0)

这是使用 System.Xml.XPath

的替代方法
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");
    }
}

答案 3 :(得分:0)

非常简单和最简单的方法是使用XSLT ..

1.创建一个XSLT模板。

2.拨打c#。

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

3.你的任务已经完成。

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