首页 > 解决方案 > 迭代每个元素的子元素并比较内部文本

问题描述

我有一个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();
    }
}

谢谢

标签: c#.netxml

解决方案


我会使用一个标志来确定是否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
}

推荐阅读