12

私は XML と C# の両方に不慣れです。「proj_title」値= heat_runまたはその他の可能な値に基づいて、特定のxmlファイルを効率的に解析して関連する数値を取得する方法を見つけようとしています。たとえば、特定のテスト実行の期間を計算します (proj_end val-proj_start val)。

ex.xml:

<proj ID="2">
      <proj_title>heat_run</proj_title>
      <proj_start>100</proj_start>
      <proj_end>200</proj_end>
</proj>

... この値はテスト実行ごとに固定されていないため、プロジェクト ID で検索することはできません。上記のファイルは非常に大きく、約 8 MB で、proj_title という名前のタグが約 2000 個あります。最初に proj_title="heat_run" を使用してすべてのタグ名を検索し、次に C# を使用してこの特定の proj_title の proj の開始値と終了値を取得する効率的な方法はありますか??

これが私の現在のC#コードです:

public class parser
{
     public static void Main()
     {
         XmlDocument xmlDoc= new XmlDocument();
         xmlDoc.Load("ex.xml");

         //~2000 tags w/ proj_title
         //any more efficient way to just look for proj_title="heat_run" specifically?
         XmlNodeList heat_run_nodes=xmlDoc.GetElementsByTagName("proj_title");
     }
}    
4

3 に答える 3

13

8MB は、現代の標準ではまったく大きくありません。個人的には、LINQ to XML を使用します。

XDocument doc = XDocument.Load("ex.xml");
var projects = doc.Descendants("proj_title")
                  .Where(x => (string) x == "heat_run")
                  .Select(x => x.Parent) // Just for simplicity
                  .Select(x => new {
                              Start = (int) x.Element("proj_start"),
                              End = (int) x.Element("proj_end")
                          });

foreach (var project in projects)
{
    Console.WriteLine("Start: {0}; End: {1}", project.Start, project.End);
}

(明らかに、これを独自の要件に合わせて調整してください。質問に基づいて何をする必要があるかは明確ではありません。)

代替クエリ:

var projects = doc.Descendants("proj")
                  .Where(x => (string) x.Element("proj_title") == "heat_run")
                  .Select(x => new {
                              Start = (int) x.Element("proj_start"),
                              End = (int) x.Element("proj_end")
                          });
于 2013-06-03T16:55:19.927 に答える
8

XPath を使用して、一致するすべてのノードを見つけることができます。次に例を示します。

XmlNodeList matches = xmlDoc.SelectNodes("proj[proj_title='heat_run']")

matches基準に一致するすべてのprojノードが含まれます。XPath の詳細: http://www.w3schools.com/xsl/xpath_syntax.asp

SelectNodes に関する MSDN ドキュメント

于 2013-06-03T16:55:28.200 に答える