首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ to XML如何将子项与中继项进行比较

LINQ to XML如何将子项与中继项进行比较
EN

Stack Overflow用户
提问于 2017-07-04 18:43:06
回答 2查看 65关注 0票数 0

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

代码语言:javascript
复制
Int32 rownum = Convert.ToInt32(e.CommandArgument.ToString());
string xmlROWID = Xmld.Descendants("ROWID").First().Value;

下面是XML中的两个子元素:

代码语言:javascript
复制
<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与我保存的每个ROWID进行比较?

我试过了:

代码语言:javascript
复制
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‘的异常,但用户代码中未处理该异常

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-04 20:07:03

正如我从您的问题中了解到的,您希望遍历ROW元素以获得其ROWID等于某个特定值的所有元素。

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

代码语言:javascript
复制
string xml = "<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>";
XDocument xDoc = XDocument.Parse(xml);

foreach (var child in xDoc.Element("VKRSADL").Element("CUSTOMER_SADLS").Element("TABLEVALUE").Elements().Where(e => e.Name == "ROW"))
{
    Console.WriteLine(child.Element("ROWID").Value);
}

注意:上面的示例假设XML模式不会被更改,如果它被更改了,那么可能会发生异常。

票数 1
EN

Stack Overflow用户

发布于 2017-07-04 19:39:47

尝试以下操作:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44903790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档