我有一个打印按钮,它为填充adobe生命周期模板提供XML数据。我正在尝试将XML中的ROWID与中继器的rowid进行比较,以使其打印关于按钮被单击的行的信息。
Int32 rownum = Convert.ToInt32(e.CommandArgument.ToString());
string xmlROWID = Xmld.Descendants("ROWID").First().Value;下面是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>将它与First()进行比较,我只得到第一个ROWID,并且可以有多个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‘的异常,但用户代码中未处理该异常
附加信息:对象引用未设置为对象的实例。
发布于 2017-07-04 20:07:03
正如我从您的问题中了解到的,您希望遍历ROW元素以获得其ROWID等于某个特定值的所有元素。
您可以使用以下代码来获取所有ROW元素,然后您可以对每个ROW执行任意操作,在下面的示例中,我将ROWID打印到控制台窗口:
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模式不会被更改,如果它被更改了,那么可能会发生异常。
发布于 2017-07-04 19:39:47
尝试以下操作:
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();
}
}
}https://stackoverflow.com/questions/44903790
复制相似问题