簡體   English   中英

用於XML解析的Linq返回null元素

[英]Linq for xml parsing returns null element

我的xml文件如下所示:

<?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>

我試圖解析comm稱為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),但是它不應該包含在代碼中。 問題是什么?

您的xml具有默認的名稱空間xmlns="Mechanical" 要訪問元素,必須指定名稱空間。

XNamespace ns = "Mechanical";

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

請注意,默認名稱空間並不直接應用於屬性。

有關更多信息,請參見命名空間默認設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM