用于XML解析的Linq返回null元素 [英] Linq for xml parsing returns null element

查看:59
本文介绍了用于XML解析的Linq返回null元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的xml文件如下所示:

My xml file looks like this:

<?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 元素,以将其显示在文本框中.

I am trying to parse out a comm element of the parent param element where name equals to C01 to display it in a textbox.

我的代码如下:

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),但是它不应该包含在代码中.问题是什么?

The problem is that it parses me out nothing ( the var prvi is null ) but it shouldn't supposed to the code. What is the problem?

推荐答案

您的xml具有默认的命名空间 xmlns ="Mechanical" .要访问元素,必须指定名称空间.

Your xml has a default namespace xmlns="Mechanical". To access the elements you must to specify the namespace.

XNamespace ns = "Mechanical";

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

请注意,默认名称空间并不直接应用于属性.

Note that default namespaces do not apply directly to attributes.

有关更多信息,请参见命名空间默认设置.

See Namespace Defaulting for more information.

这篇关于用于XML解析的Linq返回null元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆