首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ到XML:如何访问子节点

LINQ到XML:如何访问子节点
EN

Stack Overflow用户
提问于 2013-11-22 14:38:44
回答 2查看 753关注 0票数 1

我对LINQ很陌生,我很喜欢帮助您访问子节点。

XML文档:

代码语言:javascript
复制
    <schedule>
    <job>
    <name>nativeJobExample</name>
    <group>nativeJobExampleGroup</group>
    <description>Sample job for Quartz Server</description>
    <job-type>Quartz.Job.NativeJob, Quartz</job-type>
    <job-data-map>
      <entry>
        <key>command</key>
        <value>native_job_example.bat</value>
      </entry>
      <entry>
        <key>consumeStreams</key>
        <value>true</value>
      </entry>
    </job-data-map>
  </job>
  <trigger>
    <simple>
      <name>nativeJobExampleSimpleTrigger</name>
      <group>nativeJobExampleSimpleTriggerGroup</group>
      <description>Simple trigger to simply fire sample job</description>
      <job-name>nativeJobExample</job-name>
      <job-group>nativeJobExampleGroup</job-group>
      <misfire-instruction>SmartPolicy</misfire-instruction>
      <repeat-count>5</repeat-count>
      <repeat-interval>10000</repeat-interval>
    </simple>
  </trigger>
</schedule>

我能找到这样的节点:

代码语言:javascript
复制
XDocument document = XDocument.Load(@pmPathFileName);
XElement root = document.Root;
root.Elements("job").Where(e => e.Element("name").Value.Equals("nativeJobExample")).
Select(e => e.Element("description")).Single().SetValue("wwww");

XML文档包含多对作业和触发器。

关于如何更新值的两个问题:

  1. 我怎样才能得到作业-数据地图,输入,键,键,值?
  2. 我怎么才能触发单名重复计数呢?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 15:00:52

正如我在first案例中所理解的那样,您希望通过以下方式更新特定匹配的元素。你可以这样做:

代码语言:javascript
复制
        string key = "consumeStreams";
        string newValue = "false";
        var val1 = (
                       from jdm in document.Root.
                                            Elements("job").
                                            Elements("job-data-map").
                                            Elements("entry")
                       where jdm.Element("key") != null && jdm.Element("key").Value == key
                       select jdm.Element("value")
                   ).Single();

        val1.SetValue(newValue);

至于第二个案件。我宁愿使用更简洁的XPath语法,因为不需要匹配(从XML,我有一个印象只能有一个元素)。

代码语言:javascript
复制
        var repeatCountElement = root.XPathSelectElement("/schedule/job/job-data-map/entry/key");
        if (repeatCountElement != null)
            repeatCountElement.SetValue("10");
票数 1
EN

Stack Overflow用户

发布于 2013-11-22 14:51:17

有多种方法可以做到这一点,最简单的方法是像这样使用XPathSelectElements:

var key = root.XPathSelectElements("/schedule/job/job-data-map/entry/key");

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20147485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档