【问题标题】:Get a xml element with specific attribute value in c#在c#中获取具有特定属性值的xml元素
【发布时间】:2013-08-13 10:20:55
【问题描述】:

我需要获取一个子主题元素的值,该元素具有一个名为“名称”的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 的对象,它确实包含我文件的内容。

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    xdoc.Elements() 仅返回一个元素 - XML 树的根(在您的示例中为 &lt;Help&gt; 元素。

    将您的查询更改为:

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

    【讨论】:

      【解决方案2】:

      这是使用 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】:

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

        1.创建一个 XSLT 模板。

        2.在c#中调用。

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

        3.你的任务完成了。

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

        【讨论】:

          【解决方案4】:

          尝试使用 XPATH

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-16
            • 1970-01-01
            • 2012-03-03
            • 1970-01-01
            • 1970-01-01
            • 2023-01-19
            • 2013-02-04
            • 2021-05-24
            相关资源
            最近更新 更多