Здравствуйте, _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>
Зачем вам выделенные конструкции? Первая насколько я понял в случае текущего элемента комментария пропустит следующий. Вторая пропустит следующий элемент и попытается добавить чайлды комментаря?!?!?! Мне кажется их стоит убрать...
Здравствуйте, pt4h, Вы писали:
P>Зачем вам выделенные конструкции? Первая насколько я понял в случае текущего элемента комментария пропустит следующий. Вторая пропустит следующий элемент и попытается добавить чайлды комментаря?!?!?! Мне кажется их стоит убрать...
Просто функция рекурсивная...в качестве параметра передаю нод xml файла (и нод дерева), если он комментарий — соответственно не должен передаваться... и обрабатываться... соответственно надо увеличить индекс — и перейти на следующий нод файла
Здравствуйте, _YETI_, Вы писали:
_YE>Здравствуйте, pt4h, Вы писали:
P>>Зачем вам выделенные конструкции? Первая насколько я понял в случае текущего элемента комментария пропустит следующий. Вторая пропустит следующий элемент и попытается добавить чайлды комментаря?!?!?! Мне кажется их стоит убрать...
_YE>Просто функция рекурсивная...в качестве параметра передаю нод xml файла (и нод дерева), если он комментарий — соответственно не должен передаваться... и обрабатываться... соответственно надо увеличить индекс — и перейти на следующий нод файла
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);
}
}
}
P>А почему вы думаете, что у вас хмл и три имеют один к одному соответствие?
ну или я совсем... того..(отнюдь не исключаю), или хреново обьясняю...
по порядку...
данный код работает с файлами xml ,без проблем (если там нет комментариев), дерево строиться в соответствии с файлом (перед этим файл из treeview),
но чот мне стукнуло попробовать с комментариями повозиться (идея этого куска программы — сохранять пакеты для внешних девайсов, для удобства и читабельности я их горожу в treeview а потом сохраяняю в xml), комментарии мне нужны чтоб не забыть какой кусок хекса для чего(кого)не важно...
но...не пошло дело...чот я протормозил...могу кинуть больше кода.если так понятнее будет.
Re[10]: Обработка XML - игнорирование комментариев
Здравствуйте, _YETI_, Вы писали:
_YE>Здравствуйте, pt4h, Вы писали:
P>>А почему вы думаете, что у вас хмл и три имеют один к одному соответствие?
_YE>ну или я совсем... того..(отнюдь не исключаю), или хреново обьясняю... _YE>по порядку... _YE>данный код работает с файлами xml ,без проблем (если там нет комментариев), дерево строиться в соответствии с файлом (перед этим файл из treeview), _YE>но чот мне стукнуло попробовать с комментариями повозиться (идея этого куска программы — сохранять пакеты для внешних девайсов, для удобства и читабельности я их горожу в treeview а потом сохраяняю в xml), комментарии мне нужны чтоб не забыть какой кусок хекса для чего(кого)не важно... _YE>но...не пошло дело...чот я протормозил...могу кинуть больше кода.если так понятнее будет.
Когда ты побежишь по этому хмлу, то в твое дерево попадет nodeToAdd1, далее комментарий пропускается, далее добавляется nodeToAdd2. То есть у дерева 2 чайлд нода, а индекс внутри хмла (х) — равен 2 -> соотвественно когда ты пытаешься достать 3-ий элемент у дерева — его там нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Обработка XML - игнорирование комментариев
P>Когда ты побежишь по этому хмлу, то в твое дерево попадет nodeToAdd1, далее комментарий пропускается, далее добавляется nodeToAdd2. То есть у дерева 2 чайлд нода, а индекс внутри хмла (х) — равен 2 -> соотвественно когда ты пытаешься достать 3-ий элемент у дерева — его там нет.
понял..буду воевать дальше... вдруг получиться
Re[11]: Обработка XML - игнорирование комментариев
P>Когда ты побежишь по этому хмлу, то в твое дерево попадет nodeToAdd1, далее комментарий пропускается, далее добавляется nodeToAdd2. То есть у дерева 2 чайлд нода, а индекс внутри хмла (х) — равен 2 -> соотвественно когда ты пытаешься достать 3-ий элемент у дерева — его там нет.
...и тут я вообще обленился... есл не составит труда — подскажите как этого избежать
может новый нод лист составить — без комментариев...