LINQ to XML如何比较子项与转发器项

时间:2017-07-04 10:43:06

标签: c# xml linq

我有一个打印按钮,可以提供XML数据来填充adobe生命周期模板。我正在尝试将XML中的ROWID与转发器rowid进行比较,以使其打印有关按钮被单击的行的信息。

Int32 rownum = Convert.ToInt32(e.CommandArgument.ToString());
string xmlROWID = Xmld.Descendants("ROWID").First().Value;

以下是XML中的2个子项:

<VKRSADL>
    <CUSTOMER_SADLS>
      <TABLEVALUE>
        <ROW>
          <ROWID>0</ROWID>
          <ID>Съкредитополучател</ID>
          <TYPE>48</TYPE>
          <TYPEID>1</TYPEID>
          <TYPECODE>1</TYPECODE>
          <CRSCODE>777</CRSCODE>
          <EGN />
          <NAME />
          <XML>
            <SADL0>
              <OwnerCrsCode />
              <TABLEVALUE />
            </SADL0>
          </XML>
          <XMLCHECK />
        </ROW>
        <ROW>
          <ROWID>1</ROWID>
          <ID>Съкредитополучател</ID>
          <TYPE>48</TYPE>
          <TYPEID>2</TYPEID>
          <TYPECODE>1</TYPECODE>
          <CRSCODE>123123</CRSCODE>
          <EGN />
          <NAME />
          <XML>
            <SADL1>
              <OwnerCrsCode />
              <TABLEVALUE />
            </SADL1>
          </XML>
          <XMLCHECK />
        </ROW>
      </TABLEVALUE>
    </CUSTOMER_SADLS>
  </VKRSADL>

将它与First()进行比较只给出了第一个ROWID,并且可以有多个。如何将转发器rowid与我保存的每个ROWID进行比较?

我试过这个:

foreach (var child in Xmld.Root.Element("REQUEST").Element("VKRSADL").Element("CUSTOMER_SADLS").Element("TABLEVALUE").Elements("ROW").Elements()) {
    //DO SOMETHING
}

但是我收到一个错误: App_Web_f2rvuyke.dll中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理

附加信息:未将对象引用设置为对象的实例。

2 个答案:

答案 0 :(得分:1)

请尝试以下操作:

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("ROW").Select(x => new {
                rowID = (int)x.Element("ROWID"),
                id = (string)x.Element("ID"),
                type = (int)x.Element("TYPE"),
                typeID = (int)x.Element("TYPEID"),
                typeCode = (int)x.Element("TYPECODE"),
                crsCode = (int)x.Element("CRSCODE"),
            }).ToList();
        }
    }
}

答案 1 :(得分:1)

我从您的问题中了解到,您希望遍历replace元素以获取其ROW等于某个值的所有元素。

您可以使用以下代码获取所有ROWID元素,然后您可以使用每个ROW执行任何操作,在下面的示例中,我将ROW打印到控制台窗口:< / p>

ROWID

注意:上面的示例假设不会更改XML架构,如果更改,则可能发生异常。