【问题标题】:How to store child to child nodes and remove the immediate parent?如何将子节点存储到子节点并删除直接父节点?
【发布时间】:2012-10-10 07:25:10
【问题描述】:

我们正在解析一个xml,序列化之后,它将存储在数据库中。

我们的 XML 如下所示。

<SampleTypeService>
    <Name>sample1</Name>
    <URL>sample1</URL>
    <SampleTypeService_PK_ID>225d0266-e83a-44b8-88fc-700f6570d530</SampleTypeService_PK_ID>
    <SampleTypes>
        <SampleType_PK_ID>ef1d8c40-72ce-48d8-b252-9b521e96fa74</SampleType_PK_ID>
    </SampleTypes>
</SampleTypeService>

<SampleTypeService>
    <Name>sample2</Name>
    <URL>sample2</URL>
    <SampleTypeService_PK_ID>225reg66-e83a-44b8-88fc-700f6570d530</SampleTypeService_PK_ID>
    <SampleTypes>
        <SampleType_PK_ID>gh4d8c40-72ce-48d8-b252-9b521e96fa74</SampleType_PK_ID>
    </SampleTypes>
</SampleTypeService>

我们需要将SampleType_PK_ID中的值存储在一个字符串中,然后将两者都删除

SampleTypesSampleType_PK_ID 节点。

我正在尝试删除它,如下所示。

foreach (XmlNode SampleNode in SampleList)
{

    XmlNodeList ChildList = SampleNode.ChildNodes;
    for (int j = 0; j < ChildList.Count; j++)
    {

        if (ChildList[j].LocalName == "SampleType_PK_ID>")
        {
            strSampleTypePKID = ChildList[j].InnerText;
            if (strSampleTypePKID != null)
            {
                SampleNode.ParentNode.RemoveChild(ChildList[j]); 
                j--;
            }
        }
    }
    testString = SampleNode.OuterXml;
    Console.WriteLine("1):" + strSampleTypePKID);

   //Code to serialize and store in database is here.
}

strSampleTypePKID 以空字符串形式返回。我在这里想念什么。如何将子节点值带到子节点值,然后将其连同其直接父节点一起删除?

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    您正在错误级别查找内部子节点“SampleType_PK_ID”。 如果你在strSampleTypePKID = ChildList[j].InnerText; 行下一个断点,你可以看到它从未被执行过。

    请尝试以下方法:

    foreach (XmlNode SampleNode in doc.FirstChild.ChildNodes)
    {
        strSampleTypePKID = string.Empty;
        var sampleTypesNode = SampleNode.ChildNodes.OfType<XmlElement>().Where(x => x.Name == "SampleTypes").FirstOrDefault();
        if (sampleTypesNode != null)
        {
            var pkNode = sampleTypesNode.ChildNodes.OfType<XmlElement>().Where(x => x.Name == "SampleType_PK_ID").FirstOrDefault();
            if (pkNode != null)
            {
                strSampleTypePKID = pkNode.InnerText;
                SampleNode.RemoveChild(sampleTypesNode);
            }
        }
        testString = SampleNode.OuterXml;
        Console.WriteLine("1):" + strSampleTypePKID);
    
       //Code to serialize and store in database is here.
    }
    

    【讨论】:

    • 感谢您提供更简洁的答案版本。看起来比有多个循环更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多