我对LINQ很陌生,我很喜欢帮助您访问子节点。
XML文档:
<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>我能找到这样的节点:
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文档包含多对作业和触发器。
关于如何更新值的两个问题:
发布于 2013-11-22 15:00:52
正如我在first案例中所理解的那样,您希望通过以下方式更新特定匹配的元素。你可以这样做:
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,我有一个印象只能有一个元素)。
var repeatCountElement = root.XPathSelectElement("/schedule/job/job-data-map/entry/key");
if (repeatCountElement != null)
repeatCountElement.SetValue("10");发布于 2013-11-22 14:51:17
有多种方法可以做到这一点,最简单的方法是像这样使用XPathSelectElements:
var key = root.XPathSelectElements("/schedule/job/job-data-map/entry/key");
https://stackoverflow.com/questions/20147485
复制相似问题