2

我需要获取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>

如何获得 Help/Topic(Name="creatingTests") 的值?

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

4

4 回答 4

4

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

将您的查询更改为:

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

它返回包含一个元素的集合。使用FirstorFirstOrDefault将其作为单个项目,而不是集合:

XElement item = (from el in xdoc.Root.Elements()
                 where (string)el.Attribute("Name") == "creatingTests"
                 select el).FirstOrDefault();
于 2013-08-13T10:25:07.457 回答
0

尝试使用 XPATH

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

"//Topic[@Name='creatingTests']"
于 2013-08-13T10:25:19.787 回答
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");
    }
}
于 2013-08-13T10:30:38.200 回答
0

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

1.创建一个 XSLT 模板。

2.在c#中调用它。

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

3.你的任务完成了。

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

于 2013-08-13T10:33:36.657 回答