2014-01-10 149 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