2017-12-26 20 views
-1

私はファイルのcvcを読み込み、xmlのcvc値を検索するツールを作っています。リリースと呼ばれる複数の親ノートがあります。私はすでにそれがxmlのcvc値を見つけることができたが、それはそれが対応する姉妹(申し訳ありませんが、私はどのように呼び出されたか知っている)ノードを取得することはできません。 これはXMLの一部です:xmlで文字列を検索し、対応する姉妹(?)ノードを取得します。

<releases> 
    <release> 
     <id>1</id> 
     <name>name1</name> 
     <publisher></publisher> 
     <region>WLD</region> 
     <languages>en,fr,de,it,es,ru,ja</languages> 
     <group></group> 
     <imagesize>16</imagesize> 
     <serial>LA-H-AAAAA</serial> 
     <titleid>01007EF00011E000 </titleid> 
     <imgcrc>5DD119C1</imgcrc> 
     <filename>test</filename> 
     <releasename>test</releasename> 
     <trimmedsize>0</trimmedsize> 
     <firmware>1.0.0</firmware> 
     <type>1</type> 
     <card>1</card> 
    </release> 
    <release> 
     <id>2</id> 
     <name>name2</name> 
     <publisher></publisher> 
     <region>WLD</region> 
     <languages>en,fr,de,it,es,nl,pt,ru,ja</languages> 
     <group></group> 
     <imagesize>8</imagesize> 
     <serial>LA-H-AABPA</serial> 
     <titleid>0100152000022000</titleid> 
     <imgcrc>1912A1DF</imgcrc> 
     <filename>test</filename> 
     <releasename>test</releasename> 
     <trimmedsize>0</trimmedsize> 
     <firmware>1.0.0</firmware> 
     <type>1</type> 
     <card>1</card> 
    </release> 

は、これは私のコードです:

XmlNode node = doc.SelectSingleNode ("releases/*[contains(name(),'release')]/imgcrc[text() = '" + textBox6.Text + "']"); 
if (node == null) 
{ 
    XmlNode id = node.ParentNode.SelectSingleNode ("titleid"); 
    XmlNode serial = node.ParentNode.SelectSingleNode ("serial"); 
    XmlNode r = node.ParentNode.SelectSingleNode ("region"); 
    XmlNode fw = node.ParentNode.SelectSingleNode ("firmware"); 

    textBox8.Text = id.InnerText; 
    textBox4.Text = r.InnerText; 
    if (textBox4.Text == "WLD") { 
     textBox4.Text = "Worldwide"; 
    } 
    textBox3.Text = fw.InnerText; 
    if (textBox3.Text == "") { 
     textBox3.Text = "The required FW wasn't found yet"; 
    } 
    textBox2.Text = serial.InnerText; 
} else { 
    textBox2.Text = "Game is not in the DB or you modified it"; 
    textBox3.Text = "Game is not in the DB or you modified it"; 
    textBox4.Text = "Game is not in the DB or you modified it"; 
    textBox8.Text = "Game is not in the DB or you modified it"; 
} 

申し訳ありませんが、私の質問はイマイチ十分に明確かつまたは整形間違っている場合。

+0

は二度読み、Pが何であるかを理解できませんでしたうんざり?あなたがファームウェアとシリアルを見つけることができればなぜあなたはcrcを見つけることができないのですか? – Polly

+0

私の問題はcrcではありません。私はfw、地域、シリアルとIDを得ることができません – NicoAICP

+0

かもしれない、確立されたノードの親ノードを取得し、この親ノードの子を取得する? –

答えて

0

あなたはこのようなパスのものを使用する場合は、あなたがrelease要素だけではなくimgcrc要素を取得します:

var path = "releases/release[imgcrc = '"+ crc +"']"; 
var node = doc.SelectSingleNode(path); 

今、あなたはそこから関連する子の値をつかむことができます。

if(node != null) 
{ 
    var titleId = node["titleid"].InnerText; 
    var serial = node["serial"].InnerText; 
    var region = node["region"].InnerText; 
    var firmware = node["firmware"].InnerText; 

    //etc 
} 
+0

私はそれを試しました、悲しいことに、それは私に何かを与えません。 if(node!= null)をif(node == null)にすると、エラーが発生する – NicoAICP

+0

*「何も私に何も与えません」*それはどういう意味ですか?私はあなたが提供するXMLでこのコードをテストし、うまくいきます。 – DavidG

+0

私は、それが空白だったメッセージボックスにvar titleIdを表示するようにしました。 – NicoAICP

0
をXMLのLINQを試してみてください

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var results = doc.Descendants("release").Select(x => new { 
         id = (int)x.Element("id"), 
         name = (string)x.Element("name"), 
         publisher = (string)x.Element("publisher"), 
         region = (string)x.Element("region"), 
         languages = (string)x.Element("languages"), 
         group = (string)x.Element("group"), 
         imagesize = (int)x.Element("imagesize"), 
         serial = (string)x.Element("serial"), 
         titleid = (string)x.Element("titleid"), 
         imgcrc = (string)x.Element("imgcrc"), 
         filename = (string)x.Element("filename"), 
         releasename= (string)x.Element("releasename"), 
         trimmedsize = (int)x.Element("trimmedsize"), 
         firmware = (string)x.Element("firmware"), 
         type = (int)x.Element("type"), 
         card = (int)x.Element("card") 
      }).ToList(); 

     } 
    } 
} 
関連する問題