2012-10-10 212 views
0

我們解析一個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返回爲空字符串。我在這裏錯過了什麼。如何將孩子帶到子節點值,然後將其與其直接父代一起刪除?

回答

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. 
} 
+0

謝謝回答的清潔版本。看起來不錯,比擁有多個循環。 – Samselvaprabu