ПРостой вопрос, помогите
От: AlexNN  
Дата: 13.01.06 11:10
Оценка:
Есть XML:

<SH>
<EV>
<REV>
....
</REV>
</EV>
<EV>
<REV>
....
</REV>
</EV>
<EV>
<REV>
....
</REV>
</EV>
</SH>

необходимо удалить все узлы <REV> </REV> , знаю что просто , но не работал еще с XML

Пишу так:
for(int i=0;i<myDoc.GetElementsByTagName("event").Count;i++)
{
pElement = (XmlElement)myDoc.GetElementsByTagName("event")[i];
Events = pElement.GetElementsByTagName("review");
if(Events.Count!=0)
{
//MessageBox.Show(Events[0]);
pTmp = (XmlElement)Events[0];
myDoc.DocumentElement.RemoveChild(pTmp);

}
Exception: Additional information: Подлежащий удалению узел не является дочерним по отношению к этому узлу.
Всетаки должно как-то быть проще все ето.

Заранее благодарен
Re: ПРостой вопрос, помогите
От: Константин Ленин  
Дата: 13.01.06 12:01
Оценка:
Здравствуйте, AlexNN, Вы писали:

ANN>Есть XML:


ANN><SH>

ANN> <EV>
ANN> <REV>
ANN> ....
ANN> </REV>
ANN> </EV>
ANN> <EV>
ANN> <REV>
ANN> ....
ANN> </REV>
ANN> </EV>
ANN> <EV>
ANN> <REV>
ANN> ....
ANN> </REV>
ANN> </EV>
ANN></SH>

ANN>необходимо удалить все узлы <REV> </REV> , знаю что просто , но не работал еще с XML


ANN>Пишу так:

ANN>for(int i=0;i<myDoc.GetElementsByTagName("event").Count;i++)
ANN> {
ANN> pElement = (XmlElement)myDoc.GetElementsByTagName("event")[i];
ANN> Events = pElement.GetElementsByTagName("review");
ANN> if(Events.Count!=0)
ANN> {
ANN> //MessageBox.Show(Events[0]);
ANN> pTmp = (XmlElement)Events[0];
ANN> myDoc.DocumentElement.RemoveChild(pTmp);

ANN> }

ANN>Exception: Additional information: Подлежащий удалению узел не является дочерним по отношению к этому узлу.
ANN>Всетаки должно как-то быть проще все ето.

ANN>Заранее благодарен



foreach( XmlNode node in myDoc.GetElementsByTagName("REV") )
    node.Parent.RemoveChild(node);
Re[2]: ПРостой вопрос, помогите
От: AlexNN  
Дата: 13.01.06 12:16
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Здравствуйте, AlexNN, Вы писали:


ANN>>Есть XML:


ANN>><SH>

ANN>> <EV>
ANN>> <REV>
ANN>> ....
ANN>> </REV>
ANN>> </EV>
ANN>> <EV>
ANN>> <REV>
ANN>> ....
ANN>> </REV>
ANN>> </EV>
ANN>> <EV>
ANN>> <REV>
ANN>> ....
ANN>> </REV>
ANN>> </EV>
ANN>></SH>

ANN>>необходимо удалить все узлы <REV> </REV> , знаю что просто , но не работал еще с XML


ANN>>Пишу так:

ANN>>for(int i=0;i<myDoc.GetElementsByTagName("event").Count;i++)
ANN>> {
ANN>> pElement = (XmlElement)myDoc.GetElementsByTagName("event")[i];
ANN>> Events = pElement.GetElementsByTagName("review");
ANN>> if(Events.Count!=0)
ANN>> {
ANN>> //MessageBox.Show(Events[0]);
ANN>> pTmp = (XmlElement)Events[0];
ANN>> myDoc.DocumentElement.RemoveChild(pTmp);

ANN>> }

ANN>>Exception: Additional information: Подлежащий удалению узел не является дочерним по отношению к этому узлу.
ANN>>Всетаки должно как-то быть проще все ето.

ANN>>Заранее благодарен



КЛ>
КЛ>foreach( XmlNode node in myDoc.GetElementsByTagName("REV") )
КЛ>    node.Parent.RemoveChild(node);
КЛ>


После первого прохода except: список изменился
Что-то где-то я виде по этому поводу
Re[3]: ПРостой вопрос, помогите
От: Константин Ленин  
Дата: 13.01.06 15:57
Оценка:
Здравствуйте, AlexNN, Вы писали:

ANN>Здравствуйте, Константин Ленин, Вы писали:


КЛ>>Здравствуйте, AlexNN, Вы писали:


Вот код, который у меня работает без проблем



                        XmlNodeList pages = pMyDoc.GetElementsByTagName("...");
                        foreach( XmlNode page in pages )
            {    
                try
                {                    
                    page.ParentNode.RemoveChild( page );    
                }
                catch( System.ArgumentException ){}//parent node of this node already removed                
            }
Re[4]: ПРостой вопрос, помогите
От: Константин Ленин  
Дата: 13.01.06 16:15
Оценка:
Сорри, наврал

Надо не foreach а for
Re[5]: ПРостой вопрос, помогите
От: Константин Ленин  
Дата: 13.01.06 16:19
Оценка:
Решал похожую задачу, но не совсем похожую, поэтому наврал

КЛ> XmlNodeList pages = pMyDoc.GetElementsByTagName("...");

КЛ> for( int i = 0 ; i<pages.Count ; i++ )
КЛ> {
КЛ> pages[i].ParentNode.RemoveChild( pages[i] );
КЛ> }
Re[6]: ПРостой вопрос, помогите
От: Константин Ленин  
Дата: 13.01.06 16:20
Оценка:
foreach не позволяет изменять коллекцию во время итерирования, из-за этого эксепшн
Re[7]: ПРостой вопрос, помогите
От: Константин Ленин  
Дата: 13.01.06 16:27
Оценка: 2 (1)
Здравствуйте, Константин Ленин, Вы писали:

КЛ>foreach не позволяет изменять коллекцию во время итерирования, из-за этого эксепшн


Под конец рабочего дня совсем уже плохо стало
Re[8]: ПРостой вопрос, помогите
От: AlexNN  
Дата: 16.01.06 05:26
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Здравствуйте, Константин Ленин, Вы писали:


КЛ>>foreach не позволяет изменять коллекцию во время итерирования, из-за этого эксепшн


КЛ>Под конец рабочего дня совсем уже плохо стало



Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.