2016-07-03 14 views
2

私のxmlファイルは次のようになります。LINQのがnull要素を返し

<?xml version="1.0" encoding="utf-8"?> 
<roulette xmlns="Mechanical" name="Ruleta"> 
    <params name="Mechanical Counters"> 
    <param name="C01"> 
     <comm>30313</comm> 
     <command>INA</command> 
     <factor>5</factor> 
     <index>2</index> 
     <meter>0</meter> 
     <player>1023</player> 
     <meterstring>ml_BET</meterstring> 
    </param> 
    <param name="C02"> 
     <comm>30313</comm> 
     <command>INC</command> 
     <factor>5</factor> 
     <index>3</index> 
     <meter>0</meter> 
     <player>1023</player> 
     <meterstring>ml_WIN_PAYTABLE</meterstring> 
    </param> 
    <param name="C03"> 
     <comm>30313</comm> 
     <command>INE</command> 
     <factor>5</factor> 
     <index>0</index> 
     <meter>0</meter> 
     <player>1023</player> 
     <meterstring>ml_CRE_IN_BA + ml_CRE_IN_REM + ml_CRE_IN_KEY + ml_CRE_IN_TICKET</meterstring> 
    </param> 
    <param name="C04"> 
     <comm>30313</comm> 
     <command>ING</command> 
     <factor>5</factor> 
     <index>1</index> 
     <meter>0</meter> 
     <player>1023</player> 
     <meterstring>ml_CRE_OUT_KEY + ml_CRE_OUT_HANDPAY + ml_CRE_OUT_HANDPAYJP + ml_CRE_OUT_REM + ml_CRE_OUT_TICKET</meterstring> 
    </param> 
    <param name="Percentage"> 
     <factor>10</factor> 
    </param> 
    <param name="WaitAnswer"> 
     <miliseconds>2500</miliseconds> 
    </param> 
    </params> 
</roulette> 

私は名前がテキストボックスに表示しC01に等しい親param要素のcomm要素を解析しようとしています。

私のコードは次のようになります。

private void radioButton1_Click(object sender, EventArgs e) 
     { 
      //loadamo xml dokument 
      var doc = XDocument.Load("mechanical.xml"); 
      //preberemo prvi element števca C01 comm 
      var prvi = doc.Descendants("param") 
    .Where(x => (string)x.Attribute("name") == "C01") 
    .Elements("comm") 
    .FirstOrDefault(); 
      if (prvi != null) { textBox1.Text = "Je element"; } else { textBox1.Text = "ni elementa"; } 


     } 

問題は、それが何を私を解析していないということである(VAR prviがnullである)それがコードになっていないはずです。何が問題ですか?

答えて

3

xmlにはデフォルトのネームスペースxmlns="Mechanical"があります。要素にアクセスするには、名前空間を指定する必要があります。

XNamespace ns = "Mechanical"; 

var prvi = doc.Descendants(ns + "param") 
    .Where(x => (string)x.Attribute("name") == "C01") 
    .Elements(ns + "comm") 
    .FirstOrDefault(); 

デフォルトの名前空間は属性に直接適用されません。

詳細については、Namespace Defaultingを参照してください。

+0

Tnxは、現在完全に機能しています!私はxmlファイルを表示しているとき、どこに名前空間があるのか​​分かりますか? –

+0

@AndrejMaleckar - 更新を参照してください。 –

+0

答えと助けてくれてありがとう、本当に私の人を助けました! –

関連する問題