2014-01-06 2 views
0

Привет У меня есть этот XML-кодобновление и сохранить XML-узел

<AriaGostarInformation> 
    <MenuInformation> 
    <MenuNames Name="1"> 
     home 
    </MenuNames> 
    <MenuNames Name="2"> 
     pages 
    </MenuNames> 
    <MenuNames Name="3"> 
     blog 
    </MenuNames> 
    <MenuNames Name="4"> 
     gallery 
    </MenuNames> 
    <MenuNames Name="5"> 
     about us 
    </MenuNames> 
    <MenuNames Name="6"> 
    contact us 
    </MenuNames> 
    <SubMenuNames parentName="1"> 
     fgfgfgfgs 
    </SubMenuNames> 
    <SubMenuNames parentName="3"> 
    </SubMenuNames> 
    </MenuInformation> 
</AriaGostarInformation> 

и C# код:

public void updateXmlNodeWithAttribute(string XmlNodeName, string XmlAttributeName, List<string> XmlNodeAttribute, List<string> XmlNodeValue) 
{ 
    XmlDocument xdoc = new XmlDocument(); 
    xdoc.Load(_connection); 
    XmlNodeList xnode = getXmlNodeList(XmlNodeName); 

    for (int i = 0; i < XmlNodeAttribute.Count - 1; i++) 
    { 
     foreach (XmlNode item in xnode) 
     { 
      if (item.Attributes[XmlAttributeName].Value == XmlNodeAttribute[i].ToString()) 
      { 
       item.InnerText = XmlNodeValue[i].ToString(); 
      } 
     } 
    } 

    xdoc.Save(_connection); 
} 

getXmlNodeList метод возврата указано XmlNodeList из файла XML

Этот код не бросает ошибка, но НЕ обновляет узел XML.

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

Пожалуйста, помогите мне, где ошибка в моем коде?

+0

Опубликовать весь код, включая 'getXmlNodeList'. Выполняет ли внутренний цикл хотя бы один раз? Состоит ли самая внутренняя «если»? Вы сделали шаг в отладчике, выполняет ли назначение хотя бы один раз? –

+0

@RemusRusanu i отредактировал сообщение – user3054913

ответ

1

Я нашел две проблемы в вашем коде.

Первая ошибка в вашей петле for. С -1 последний элемент в списке всегда не используется. Или, если у вас есть только один элемент в вашем списке, цикл for никогда не выполняется.

Вторая проблема заключается в том, что вы дважды загружаете файл XML. Первый раз вы загружаете его в метод updateXmlNodeWithAttribute. Второй раз вы загружаете его в методе getXmlNodeList.

Вы должны знать, что каждый загруженный XML-документ не зависит от другого загруженного XML-документа. Итак, что делает ваш код, вы получаете список с XML-узлами из вашего XML-файла, загруженного в метод getXmlNodeList, отредактируйте один из этих XML-узлов, а затем попытаетесь сохранить XML-документ, загруженный в метод updateXmlNodeWithAttribute, где никаких изменений не было сделано, два документа XML полностью независимы.

Так что вам нужно использовать один и тот же объект XmlDocument в обоих методах. См. Приведенный ниже код.

public static void updateXmlNodeWithAttribute(string XmlNodeName, string XmlAttributeName, List<string> XmlNodeAttribute, List<string> XmlNodeValue) 
    { 
     XmlDocument xdoc = new XmlDocument(); 
     xdoc.Load(_connection); 
     XmlNodeList xnode = getXmlNodeList(XmlNodeName,xdoc); 

     for (int i = 0; i < XmlNodeAttribute.Count; i++) 
     { 
      foreach (XmlNode item in xnode) 
      { 
       if (item.Attributes[XmlAttributeName].Value == XmlNodeAttribute[i].ToString()) 
       { 
        item.InnerText = XmlNodeValue[i].ToString(); 
       } 
      } 
     } 

     xdoc.Save(_connection); 
    } 

    public static XmlNodeList getXmlNodeList(string XmlNodeName, XmlDocument doc) 
    { 
     XmlNodeList elemList = doc.GetElementsByTagName(XmlNodeName); 
     return elemList; 
    } 
Смежные вопросы