c# - 迭代每个元素的子元素并比较内部文本
问题描述
我有一个xml文档如下:
<customerList>
<customerRecord>
<customerName>David</customerName>
<customerAge>25</customerAge>
<customerAddress>1, Walking Street, 3000 Las Vegas</customerAddress>
<customerPIC>
<picList>
<picName>Rose</picName>
<picPosition>supervisor</picPosition>
<idType>1</idType>
<idNumber>90001000</idNumber>
</picList>
<picList>
<picName>James</picName>
<picPosition>supervisor</picPosition>
<idType>2</idType>
<idNumber>90002000</idNumber>
</picList>
</customerPIC>
<customerCompany>Facebook</customerCompany>
</customerRecord>
<customerRecord>
<customerName>Carrie</customerName>
<customerAge>25</customerAge>
<customerAddress>2, Dancing Road, 2000 New Mexico</customerAddress>
<customerPIC>
<picList>
<picName>Maisie</picName>
<picPosition>secretary</picPosition>
<idType>1</idType>
<idNumber>90003000</idNumber>
</picList>
<picList>
<picName>John</picName>
<picPosition>HR</picPosition>
<idType>2</idType>
<idNumber>90004000</idNumber>
</picList>
</customerPIC>
<customerCompany>Uber</customerCompany>
</customerRecord>
<customerRecord>
<customerName>Dexter</customerName>
<customerAge>25</customerAge>
<customerAddress>3, Hugging Street, 3000 New Orleans</customerAddress>
<customerPIC>
<picList>
<picName>Jill</picName>
<picPosition>PA</picPosition>
<idType>1</idType>
<idNumber>90005000</idNumber>
</picList>
<picList>
<picName>Alex</picName>
<picPosition>supervisor</picPosition>
<idType>2</idType>
<idNumber>90006000</idNumber>
</picList>
</customerPIC>
<customerCompany>Google</customerCompany>
</customerRecord>
简而言之,我想将每个 customerRecord 中每个 picList 的每个 idNumber 与 picString = "90001000" 进行比较。由于在每个客户记录中都会有两个 picList,如果其中任何一个 idNumber 不等于 picString。我需要删除该客户记录。
现在,我使用的代码如下。由于 picString 可以在两个 picList 中的任何一个中,我一直在思考如何进行比较,而不冒删除每个客户记录的风险。
string picString = "90001000";
foreach (XmlNode customerRecord in customerList)
{
XmlNode customerPIC = customerRecord.SelectSingleNode("//pic:customerPIC", nsManager);
foreach (XmlNode picList in customerPIC)
{
XmlNode idNumber = picList.SelectSingleNode("//pic:idNumber", nsManager);
string idNumberString = idNumberString.InnerText;
if (idNumberString != picString)
customerRecord.RemoveAll();
}
}
谢谢
解决方案
我会使用一个标志来确定是否picString
找到了等于“90001000”的值。
string picString = "90001000";
foreach (XmlNode customerRecord in customerList)
{
XmlNode customerPIC = customerRecord.SelectSingleNode("//pic:customerPIC", nsManager);
//let's consider the picstring wasn't found by default, for each customerRecord.
bool isPicStringFound = false;
foreach (XmlNode picList in customerPIC)
{
XmlNode idNumber = picList.SelectSingleNode("//pic:idNumber", nsManager);
string idNumberString = idNumberString.InnerText;
if (idNumberString == picString)
isPicStringFound = true; //we found it ! no need to delete
}
//no picString found ? delete !
if (!isPicStringFound)
customerRecord.RemoveAll();
//at next loop, the flag will be reset
}
推荐阅读
- typescript - 将参数类型作为类型参数传递给 TypeScript 或 Flow 中的另一种类型
- postgresql - 替换日期列
- python - 'pimp' 气流 databricks_hook 或一些 python 库来创建和获取下游任务的 cluster_id
- angular - addLangs() 始终为空
- excel - For If 语句
- reactjs - 如何让 Material-UI DataGrid 从数组中读取对象数据?
- python - 如何删除数据框中混合类型列中包含各种类型日期的行?
- dictionary - 在 Go 中迭代时修改地图
- java - Gradle Build找不到依赖项
- jasper-reports - 如何用一些静态文本填充空白?