Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 08:15
Оценка:
Вот пример кода... — добавление нода в treeView в соответствии с файлом xml, но без комментариев. Не получилось...
Укажите на трабл...


private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
        {

            int x; 
            XmlNodeList xNodeList;
            if (xmlNode.HasChildNodes) //The current node has children
            {
                xNodeList = xmlNode.ChildNodes;
                for ( x = 0; x <= xNodeList.Count - 1; x++)
                //обход всех дочерних
                {
                    if (xmlNode.ChildNodes[x].NodeType != XmlNodeType.Comment)
                    {
                        xNode = xmlNode.ChildNodes[x];
                        TreeNode trNode = new TreeNode(xNode.Name);
                        // MessageBox.Show(xNode.Name);
                        treeNode.Nodes.Add(trNode);
                        if (xmlNode.ChildNodes[x].Attributes.Count > 0)
                        {
                            for (int y = 0; y <= xNode.Attributes.Count - 1; y++)
                            {
                                if (xNode.Attributes[y].NodeType != XmlNodeType.Comment)
                                {
                                    TreeNode hh = new TreeNode(xNode.Attributes[y].Value);
                                    //MessageBox.Show(hh.Text);
                                    trNode.Nodes.Add(hh);
                                }
                                else
                                    y++;
                            }

                        }
                        tNode = treeNode.Nodes[x];
                        addTreeNode(xNode, tNode);
                    }
                    else
                    {
                        
                        x++;
                        xNode = xmlNode.ChildNodes[x];
                        tNode = treeNode.Nodes[x];
                        addTreeNode(xNode, tNode);
                    }
                }
            }
           // else //No children, so add the outer xml (trimming off whitespace)
               // treeNode.Text = xmlNode.OuterXml.Trim();
        }
Re: Обработка XML - игнорирование комментариев
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 21.02.07 08:42
Оценка:
Здравствуйте, _YETI_, Вы писали:

_YE>Вот пример кода... — добавление нода в treeView в соответствии с файлом xml, но без комментариев. Не получилось...

_YE>Укажите на трабл...


_YE>
_YE>private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
_YE>        {

_YE>            int x; 
_YE>            XmlNodeList xNodeList;
_YE>            if (xmlNode.HasChildNodes) //The current node has children
_YE>            {
_YE>                xNodeList = xmlNode.ChildNodes;
_YE>                for ( x = 0; x <= xNodeList.Count - 1; x++)
_YE>                //обход всех дочерних
_YE>                {
_YE>                    if (xmlNode.ChildNodes[x].NodeType != XmlNodeType.Comment)
_YE>                    {
_YE>                        xNode = xmlNode.ChildNodes[x];
_YE>                        TreeNode trNode = new TreeNode(xNode.Name);
_YE>                        // MessageBox.Show(xNode.Name);
_YE>                        treeNode.Nodes.Add(trNode);
_YE>                        if (xmlNode.ChildNodes[x].Attributes.Count > 0)
_YE>                        {
_YE>                            for (int y = 0; y <= xNode.Attributes.Count - 1; y++)
_YE>                            {
_YE>                                if (xNode.Attributes[y].NodeType != XmlNodeType.Comment)
_YE>                                {
_YE>                                    TreeNode hh = new TreeNode(xNode.Attributes[y].Value);
_YE>                                    //MessageBox.Show(hh.Text);
_YE>                                    trNode.Nodes.Add(hh);
_YE>                                }
_YE>                                else
_YE>                                    y++;
_YE>                            }

_YE>                        }
_YE>                        tNode = treeNode.Nodes[x];
_YE>                        addTreeNode(xNode, tNode);
_YE>                    }
_YE>                    else
_YE>                    {
                        
_YE>                        x++;
_YE>                        xNode = xmlNode.ChildNodes[x];
_YE>                        tNode = treeNode.Nodes[x];
_YE>                        addTreeNode(xNode, tNode);
_YE>                    }
_YE>                }
_YE>            }
_YE>           // else //No children, so add the outer xml (trimming off whitespace)
_YE>               // treeNode.Text = xmlNode.OuterXml.Trim();
_YE>        }
_YE>


Зачем вам выделенные конструкции? Первая насколько я понял в случае текущего элемента комментария пропустит следующий. Вторая пропустит следующий элемент и попытается добавить чайлды комментаря?!?!?! Мне кажется их стоит убрать...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 08:51
Оценка:
Здравствуйте, pt4h, Вы писали:

P>Зачем вам выделенные конструкции? Первая насколько я понял в случае текущего элемента комментария пропустит следующий. Вторая пропустит следующий элемент и попытается добавить чайлды комментаря?!?!?! Мне кажется их стоит убрать...


Просто функция рекурсивная...в качестве параметра передаю нод xml файла (и нод дерева), если он комментарий — соответственно не должен передаваться... и обрабатываться... соответственно надо увеличить индекс — и перейти на следующий нод файла
Re[3]: Обработка XML - игнорирование комментариев
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 21.02.07 08:58
Оценка:
Здравствуйте, _YETI_, Вы писали:

_YE>Здравствуйте, pt4h, Вы писали:


P>>Зачем вам выделенные конструкции? Первая насколько я понял в случае текущего элемента комментария пропустит следующий. Вторая пропустит следующий элемент и попытается добавить чайлды комментаря?!?!?! Мне кажется их стоит убрать...


_YE>Просто функция рекурсивная...в качестве параметра передаю нод xml файла (и нод дерева), если он комментарий — соответственно не должен передаваться... и обрабатываться... соответственно надо увеличить индекс — и перейти на следующий нод файла


Индекс и без того увеличивается конструкцией for.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 09:01
Оценка:
Здравствуйте, pt4h, Вы писали:


P>Индекс и без того увеличивается конструкцией for.

точно...спасибо...просто уже 3 сутки сплю по 2 часа..похоже уже до маразма дошел.
Re[5]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 09:29
Оценка:
хотя ошибка осталась...
Re[6]: Обработка XML - игнорирование комментариев
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 21.02.07 09:31
Оценка:
Здравствуйте, _YETI_, Вы писали:

_YE>хотя ошибка осталась...


В чем ошибка?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 10:31
Оценка:
Здравствуйте, pt4h, Вы писали:


P>В чем ошибка?



if (xmlNode.HasChildNodes) //The current node has children
            {
                xNodeList = xmlNode.ChildNodes;
                for ( x = 0; x <= xNodeList.Count - 1; x++)
                {
                    if (xmlNode.ChildNodes[x].NodeType != XmlNodeType.Comment)
                    {
                        xNode = xmlNode.ChildNodes[x];
                        TreeNode trNode = new TreeNode(xNode.Name);
                        treeNode.Nodes.Add(trNode);
                        if (xmlNode.ChildNodes[x].Attributes.Count > 0)
                        {
                            for (int y = 0; y <= xNode.Attributes.Count - 1; y++)
                            {
                               // if (xNode.Attributes[y].NodeType != XmlNodeType.Comment)
                               // {
                                    TreeNode hh = new TreeNode(xNode.Attributes[y].Value);
                                    trNode.Nodes.Add(hh);
                                //}

                            }

                        }
                        tNode = treeNode.Nodes[x];Specified argument was out of the range of valid values.Parameter name: index


                        MessageBox.Show(xmlNode.ChildNodes[x].NodeType.ToString());
                        addTreeNode(xNode, tNode);
                    }
                }
            }
Re[8]: Обработка XML - игнорирование комментариев
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 21.02.07 10:37
Оценка:
Здравствуйте, _YETI_, Вы писали:

_YE>Здравствуйте, pt4h, Вы писали:


<skipped>

А почему вы думаете, что у вас хмл и три имеют один к одному соответствие?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 10:50
Оценка:
Здравствуйте, pt4h, Вы писали:


P>А почему вы думаете, что у вас хмл и три имеют один к одному соответствие?


ну или я совсем... того..(отнюдь не исключаю), или хреново обьясняю...
по порядку...
данный код работает с файлами xml ,без проблем (если там нет комментариев), дерево строиться в соответствии с файлом (перед этим файл из treeview),
но чот мне стукнуло попробовать с комментариями повозиться (идея этого куска программы — сохранять пакеты для внешних девайсов, для удобства и читабельности я их горожу в treeview а потом сохраяняю в xml), комментарии мне нужны чтоб не забыть какой кусок хекса для чего(кого)не важно...
но...не пошло дело...чот я протормозил...могу кинуть больше кода.если так понятнее будет.
Re[10]: Обработка XML - игнорирование комментариев
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 21.02.07 10:55
Оценка:
Здравствуйте, _YETI_, Вы писали:

_YE>Здравствуйте, pt4h, Вы писали:



P>>А почему вы думаете, что у вас хмл и три имеют один к одному соответствие?


_YE>ну или я совсем... того..(отнюдь не исключаю), или хреново обьясняю...

_YE>по порядку...
_YE>данный код работает с файлами xml ,без проблем (если там нет комментариев), дерево строиться в соответствии с файлом (перед этим файл из treeview),
_YE>но чот мне стукнуло попробовать с комментариями повозиться (идея этого куска программы — сохранять пакеты для внешних девайсов, для удобства и читабельности я их горожу в treeview а потом сохраяняю в xml), комментарии мне нужны чтоб не забыть какой кусок хекса для чего(кого)не важно...
_YE>но...не пошло дело...чот я протормозил...могу кинуть больше кода.если так понятнее будет.

<current><nodeToAdd1/><!-- Comment --><nodeToAdd2/></current>


Когда ты побежишь по этому хмлу, то в твое дерево попадет nodeToAdd1, далее комментарий пропускается, далее добавляется nodeToAdd2. То есть у дерева 2 чайлд нода, а индекс внутри хмла (х) — равен 2 -> соотвественно когда ты пытаешься достать 3-ий элемент у дерева — его там нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 11:00
Оценка:
Здравствуйте, pt4h, Вы писали:


P>Когда ты побежишь по этому хмлу, то в твое дерево попадет nodeToAdd1, далее комментарий пропускается, далее добавляется nodeToAdd2. То есть у дерева 2 чайлд нода, а индекс внутри хмла (х) — равен 2 -> соотвественно когда ты пытаешься достать 3-ий элемент у дерева — его там нет.




понял..буду воевать дальше... вдруг получиться
Re[11]: Обработка XML - игнорирование комментариев
От: _YETI_  
Дата: 21.02.07 11:37
Оценка:
Здравствуйте, pt4h, Вы писали:


P>Когда ты побежишь по этому хмлу, то в твое дерево попадет nodeToAdd1, далее комментарий пропускается, далее добавляется nodeToAdd2. То есть у дерева 2 чайлд нода, а индекс внутри хмла (х) — равен 2 -> соотвественно когда ты пытаешься достать 3-ий элемент у дерева — его там нет.



...и тут я вообще обленился... есл не составит труда — подскажите как этого избежать
может новый нод лист составить — без комментариев...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.