2016-09-15 10 views
2

によるXMLノードの削除タイムスタンプに基づいてノードを「自動的に」削除する方法については助けが必要です。特定の日付は、xml文書内のユーザによって定義される。 17/9/2006 誰かが私に例を教えてもらえますか? ありがとうございます!タイムスタンプC#

<root> 
    <element> 
    </element> 
    <timestamp time="2016-09-16T13:45:30"> 
    </timestamp> 
    <--how do I delete element based on the given timestamp?--> 
    </root> 

    //UNTESTED CODE 

    XDocument doc = XDocument.Load("time.xml"); 
    var name = doc.Descendants("root") 
     .Where(n => n.Attribute("time").Value == "2016-09-16T13:45:30") 
     .Select(n => (string)n) 
     .First(); 
     <--how can I delete it based on timestamp--> 
     name.Element("element").Remove(); 
+0

これは有効なxmlではありません。タイムスタンプノードには、実際のタイムスタンプの値を持つ属性が必要です。 – kall2sollies

+0

標準のdatetimeフォーマットを意味しますが、これはデモxmlに過ぎません。 – user46000

+0

あなたのXMLは現在有効なので、あなたの正確な問題は何ですか? XMLを解析してノードを特定するか、ISO日付形式を解析しますか? – kall2sollies

答えて

2

DateTime変数inputDateと比較したいとします。

// I have formatted yor XML and structured it. "root" is the the parent node. Elements are the child elements of root consisting of timestamp tag. 

string xmlInput = @" 
<root> 
<element> 
<timestamp time='2016-09-16T13:45:30'> 
</timestamp> 
</element> 
<element> 
<timestamp time='2016-10-16T13:45:30'> 
</timestamp> 
</element> 
</root>"; 

    XDocument xdoc = XDocument.Parse(xmlInput); 
    xdoc.Descendants("root").Elements("element"). 
          Where(x => DateTime.Compare(DateTime.Parse(x.Element("timestamp").Attribute("time").Value,null, DateTimeStyles.RoundtripKind).Date, inputDate.Date) ==0). 
          ToList().ForEach(x => x.Remove()); 

私は唯一の日ではない時間の平等のためのinputdateで各要素のXML日付timestampを比較しました。あなたはどんな条件でも構いません。

注:System.Globalizationを使用する必要があります。

using System.Globalization; 
using System.Xml.Linq; 
using System.Xml; 
using System.Linq; 
+0

Τありがとう! – user46000

3

解析ISO 8601の日付/時刻の形式:

string input = "2016-09-16T13:45:30"; 
DateTime converted = DateTime.Parse(input, null, DateTimeStyles.RoundtripKind); 

日はのDateTime型に変換したら、削除したいノードを識別(およびそのためきゅうを使用して、高度でそれを使用することができます推奨)。

+0

ご返信ありがとうございます。コードを更新しました。だから私は時間属性と "変換"を比較しますか? – user46000

+0

XMLを解析するときには、文字列型のtime属性を、指定したコードスニペットのDateTimeに変換し、このDateTimeを、ノードを削除するかどうかを決定するために使用する値と比較します。 – kall2sollies

関連する問題