使用c#从XML中获取条件值

本文关键字:获取 条件 XML 使用 | 更新日期: 2023-09-27 18:14:07

我对c#使用XML有点陌生。

XML CODE:

<LVL2>
  <Tables>
    <TBL_ID>1</TBL_ID>
    <TBL_Name>test1</TBL_Name>
    <MD_ID>1</MD_ID>
  <Tables>
  <Tables>
    <TBL_ID>2</TBL_ID>
    <TBL_Name>test2</TBL_Name>
    <MD_ID>1</MD_ID>
  </Tables>
  <Tables>
    <TBL_ID>3</TBL_ID>
    <TBL_Name>test3</TBL_Name>
    <MD_ID>1</MD_ID>
  </Tables>
</LVL2>
<LVL2>
  <Tables>
    <TBL_ID>1</TBL_ID>
    <TBL_Name>test4</TBL_Name>
    <MD_ID>2</MD_ID>
  </Tables>
  <Tables>
    <TBL_ID>2</TBL_ID>
    <TBL_Name>test5</TBL_Name>
    <MD_ID>2</MD_ID>
  </Tables>
  <Tables>
    <TBL_ID>3</TBL_ID>
    <TBL_Name>test6</TBL_Name>
    <MD_ID>2</MD_ID>
  </Tables>
</LVL2>

如何将只有md_id = 1tbl_name的文本值插入到复选列表框中?这是我当前的代码。

while (xmlReader.Read())
{
    switch (xmlReader.NodeType)
    {
        case XmlNodeType.Element:
            elName = xmlReader.Name;
            break;
        case XmlNodeType.Text:
            if (elName == "TBL_Name" && MD_ID == "1")
            {
                checkedListBox2.Items.Add(xmlReader.Value);
            }
            break;     
    }
}

我似乎无法弄清楚如何获得具有MD_ID = "1"和输出的文本:

test4
test5
test6

使用c#从XML中获取条件值

首先,xml格式不正确。它应该包含一个根节点,并且您错过了关闭<Tables>标记。在示例示例中,如果希望选择具有"MD_ID = 1"的元素的表名,结果将是:

test1
test2
test3

如果您想要如您所说的o/p,那么条件将不等于1。解决方案如下:

string xmlInput =  @"
    <root>
    <LVL2>
    <Tables>
     <TBL_ID>1</TBL_ID>
     <TBL_Name>test1</TBL_Name>
     <MD_ID>1</MD_ID>
   </Tables>
   <Tables>
    <TBL_ID>2</TBL_ID>
    <TBL_Name>test2</TBL_Name>
    <MD_ID>1</MD_ID>
   </Tables>
   <Tables>
    <TBL_ID>3</TBL_ID>
    <TBL_Name>test3</TBL_Name>
    <MD_ID>1</MD_ID>
   </Tables>
   </LVL2>
   <LVL2>
   <Tables>
    <TBL_ID>1</TBL_ID>
    <TBL_Name>test4</TBL_Name>
    <MD_ID>2</MD_ID>
   </Tables>
   <Tables>
    <TBL_ID>2</TBL_ID>
    <TBL_Name>test5</TBL_Name>
    <MD_ID>2</MD_ID>
   </Tables>
   <Tables>
    <TBL_ID>3</TBL_ID>
    <TBL_Name>test6</TBL_Name>
    <MD_ID>2</MD_ID>
   </Tables>
  </LVL2>
  </root>";
XDocument  xdoc = XDocument.Parse(xmlInput);
var filteredXML =
  xdoc.Descendants("root")
    .Elements("LVL2")
    .Elements("Tables")
    .Where(x => string.Compare(x.Element("MD_ID").Value, "1") == 0)
    .Select(x => x.Element("TBL_Name").Value)
    .ToList();
Console.WriteLine(filteredXML);

引用以下命名空间:

using System.Xml.Linq;