簡體   English   中英

具有命名空間的C#XPATH

[英]C# XPATH with namespaces

這是XML文件,我想為cron-expression獲取Xpath,實際上我想更改內部文本。 我嘗試了很多方法,但沒有任何效果,我只想獲得直接答案。 我已經嘗試過像local-name和XmlnamespaceManager.addnamespace ,但是它不起作用。

<!-- This file contains job definitions in schema version 2.0 format -->

<job-scheduling-data 
xmlns="http://quartznet.sourceforge.net/JobSchedulingData" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">

  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>

  <schedule>

    <job>
        <name>SampleJob</name>
        <group>SampleGroup</group>
        <description>My job</description>
        <job-type>Quartz.Server.SampleJob, Quartz.Server</job-type>
        <durable>true</durable>
        <recover>false</recover>
    </job>

    <trigger>
     <cron>
        <name>SampleTrigger</name>
        <group>SampleGroup</group>
        <description>Simple trigger to simply fire sample job</description>
        <job-name>SampleJob</job-name>
        <job-group>SampleGroup</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <cron-expression>0 * 15 * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>

這是我的代碼:

 protected void Button2_Click(object sender, EventArgs e)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("D:/Chrome/Quartz.NET-2.4.1/src/Quartz.Examples/quartz_jobs.xml");
        XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
        xnm.AddNamespace("h", 
"http://quartznet.sourceforge.net/JobSchedulingData");

   XmlNode XN = doc.SelectSingleNode("h:job-scheduling-data/h:schedule/h:trigger/h:cron/h:cron-expression",xnm);


 //     XmlNode XN = doc.SelectSingleNode("/*[local-name() = 'job-scheduling-data']/*[local-name() = 'schedule']/*[local-name() = 'trigger']/*[local-name() = 'cron']/*[local-name() = 'cron-expression']");
    XN.InnerText = "0";
    doc.Save("D:/Chrome/Quartz.NET-2.4.1/src/Quartz.Examples/quartz_jobs.xml");//
}

這就是您發布的xml的工作方式。 如果可以找到該元素,則將注意保存的xml。

var doc = new XmlDocument();
doc.Load("D:/Chrome/Quartz.NET-2.4.1/src/Quartz.Examples/quartz_jobs.xml");

var namespaceManager = new XmlNamespaceManager(doc.NameTable);
namespaceManager.AddNamespace("x", "http://quartznet.sourceforge.net/JobSchedulingData");

XmlNode selectedNode = doc.SelectSingleNode("x:job-scheduling-data/x:schedule/x:trigger/x:cron/x:cron-expression", namespaceManager);
if (selectedNode != null)
{
    selectedNode.InnerXml = "0";
    doc.Save("D:/Chrome/Quartz.NET-2.4.1/src/Quartz.Examples/quartz_jobs.xml");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM