2014-01-10 148 views
0

我已經創建了用於從XML中選擇和刪除節點的方法。我的代碼運行但XML節點不會被刪除。如何刪除XML節點?

我不知道在哪裏的代碼是錯了,請幫我這個問題:

public XmlNodeList getXmlNodeList(string XmlNodeName) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(_connection); 
    XmlNodeList elemList = doc.GetElementsByTagName(XmlNodeName); 
    return elemList; 
} 

public void deleteXmlNode(string XmlNodeName, string XmlNodeValue) 
{ 
    XmlDocument xdoc = new XmlDocument(); 
    xdoc.Load(_connection); 
    XmlNodeList xnode = getXmlNodeList(XmlNodeName); 

    foreach (XmlNode item in xnode) 
    { 
     if (item.InnerText == XmlNodeValue) 
     { 
      item.ParentNode.RemoveChild(item); 
      break; 
     } 
    } 
    xdoc.Save(_connection); 
} 

我的XML代碼:

<AriaGostarInformation> 
    <MenuInformation> 
    <MenuNames> 
     one 
    </MenuNames> 
    <MenuNames Name="1">two</MenuNames> 
    <MenuNames Name="2">three</MenuNames> 
    <MenuNames Name="3">four</MenuNames> 
    <MenuNames Name="4">five</MenuNames> 
    <MenuNames Name="5">six</MenuNames> 
    <SubMenuNames parentName="1"> 
     fgfgfgfgs 
    </SubMenuNames> 
    <SubMenuNames parentName="3"> 
    </SubMenuNames> 
    </MenuInformation> 
    <SliderInformation> 
    </SliderInformation> 
    <LasProductInformation> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    <Product> 
     <ImageAddress alt="">../Static/Css/Images/c.jpg</ImageAddress> 
     <Subject>bere</Subject> 
     <Description>nare</Description> 
    </Product> 
    </LasProductInformation> 
</AriaGostarInformation> 

回答

0

您是通過加載兩個獨立XmlDocument對象來傷害你的表現查找xml樹的節點。但是,它看起來並不像你有什麼錯誤。您可能不會傳遞有效的參數。你是否試圖添加任何跟蹤來查看提交給這些方法的值?也只是建議這兩種方法可以組合成使用Linq-to-Xml的非常短的方法,使用下面的代碼爲您的刪除節點方法。下面可以刪除所有匹配的節點:

public void deleteXmlNode(string xmlNodeName, string xmlNodeValue) 
{ 
    XDocument xDoc = XDocument.Load(_connection); 
    var xNodeList = xDoc.Descendants(xmlNodeName).Where(n => n.Value == xmlNodeValue); 
    xNodeList.Remove(); 
} 

來源:http://msdn.microsoft.com/en-us/library/bb357554(v=vs.110).aspx