我有一个打印按钮,可以提供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”类型的异常,但未在用户代码中处理
附加信息:未将对象引用设置为对象的实例。
答案 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架构,如果更改,则可能发生异常。