2017-07-10 20 views
0

これはXMLファイルです。Xパスをcron-expressionにしたいのですが、実際は内部のテキストを変更したいと思います。私は多くの方法を試しましたが、何も機能せず、ただの答えを得たいだけです。 ローカル名とXmlnamespaceManager.addnamespaceのように試しましたが、動作しません。 C#XPATHの名前空間

<!-- 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");// 
} 
+0

xmlの要素には、そのxpathの要素に「h:」接頭辞が付いているのはなぜですか? – NtFreX

+0

@NtFreX XMLファイルに慣れていないので、私はこれらのh:を削除すると同じ結果になりました –

+0

xmlをコピーすると、あなたの質問にあるようになり、 'SelectSingleNode '' h: 'の全てがなければ、私は正しい要素を得る。 – NtFreX

答えて

0

これは、あなたがポストされた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"); 
} 
+0

操作後にXMLファイルを転記することができます。 'selectdNode'がnullの場合、' else'の場合を実行します。 –

+0

@muxingwang要素が見つからない場合、何も実行されないため、 'InnerText'を正常に変更しなかったと思います。これは、読まれたxmlが質問に投稿したものと似ていない場合にのみ可能です。 – NtFreX

+0

@muxingwang私はコードではなくXMLを意味しました。 xmlファイルを見てください。あなたが投稿したxmlとは違うはずです。 – NtFreX