【发布时间】:2019-10-09 13:10:25
【问题描述】:
我想将来自用户输入的值与来自 XML 元素的值进行比较,并从另一个 XML 元素中选择值。 例如: 请考虑以下 XML:
<?xml version="1.0" encoding="utf-8" ?>
<CardTypes>
<Card>
<DccCardIssueNumber>99</DccCardIssueNumber>
<DccCardIssuerName>VIS</DccCardIssuerName>
<DccCardIssuerFullName>VISHAL</DccCardIssuerFullName>
<RPOSCardType>1600</RPOSCardType>
<DeliveryNote>false</DeliveryNote>
</Card>
<Card>
<DccCardIssueNumber>20</DccCardIssueNumber>
<DccCardIssuerName>VIS</DccCardIssuerName>
<DccCardIssuerFullName>VISA</DccCardIssuerFullName>
<RPOSCardType>1600</RPOSCardType>
<DeliveryNote>false</DeliveryNote>
<SubType>
<DccCardIssueSubTypeNumber>1</DccCardIssueSubTypeNumber>
<DccCardIssueSubTypeName>VIS</DccCardIssueSubTypeName>
<DccCardIssueSubTypeFullName>VISA</DccCardIssueSubTypeFullName>
<RPOSCardType>1600</RPOSCardType>
<DeliveryNote>false</DeliveryNote>
</SubType>
<SubType>
<DccCardIssueSubTypeNumber>2</DccCardIssueSubTypeNumber>
<DccCardIssueSubTypeName>DKV</DccCardIssueSubTypeName>
<DccCardIssueSubTypeFullName>DKV</DccCardIssueSubTypeFullName>
<RPOSCardType>2510</RPOSCardType>
<DeliveryNote>false</DeliveryNote>
</SubType>
</Card>
</CardTypes>
现在,最初,我正在检查用户提供的 DccCardIssueNumber,如果匹配,我想检查我们是否有该卡的 SubType。 如果 subtype 存在,我想打印 DccCardIssueSubTypeFullName,如果 SubType 不存在,我只想打印 DccCardIssuerFullName。
到目前为止,我已经实现了这个:
using (XmlReader xr = XmlReader.Create("DccCardTypeMap.xml"))
{
while (xr.Read())
{
if (xr.IsStartElement())
{
switch (xr.Name.ToString())
{
case "DccCardIssueNumber":
if (y == "")
{
if (xr.ReadString() == x)
{
xr.ReadToFollowing("DccCardIssuerFullName");
transaction.CardTypeName = xr.ReadString();
}
}
else
{
if (xr.ReadString() == x)
{
xr.ReadToFollowing("DccCardIssueSubTypeNumber");
if (xr.ReadString() == y)
{
xr.ReadToFollowing("DccCardIssueSubTypeFullName");
transaction.CardTypeName = xr.ReadString();
}
}
}
break;
}
}
}
}
这里,y 表示子类型编号(1 或 2),x 表示 DCCCardIssueNumber
【问题讨论】:
-
你为什么使用
XmlReader而不是通过XmlSerializer或XDocument将整个模型读入内存?实际文件是否太大以至于无法读取?
标签: c# xml xml-parsing