#c# #xml #xml-parsing
#c# #xml #xml-синтаксический анализ
Вопрос:
У меня есть следующий XML
файл
<files>
<mainFile num="333">
<DE>
<file>
</file>
<file>
</file>
</DE>
</mainFile>
<mainFile num="444">
<DE />
</mainFile>
<mainFile num="555">
<DE>
<file>
</file>
<file>
</file>
<file>
</file>
</DE>
</mainFile>
<mainFile num="666">
<TLL>
</TLL>
</mainFile>
</files>
Я хочу удалить из каждого узла <mainFile num="<number>">
все, что внутри <DE>
— только если оно вызывается <DE>
, в случае других узлов внутри, как <TLL>
в примере, не трогайте его.
моя идея состоит в том, чтобы получить что-то вроде этого:
<files>
<mainFile num="333"> </mainFile>
<mainFile num="444"> </mainFile>
<mainFile num="555"> </mainFile>
<mainFile num="666">
<TLL>
<TLL>
</mainFile>
</files>
Есть идеи, как я могу это реализовать?
Я пытался :
var xmlString = XElement.Parse(xmlString);
xmlString.XPathSelectElements("//DE").Remove();
xmlString .Element("DE").Remove();
Комментарии:
1. Да, есть несколько способов сделать это. Вы уже что-нибудь пробовали?
2. Любой вопрос, кроме подразумевающего, напишите это для меня
3. Да, я пробовал, я добавил основное из того, что я пробовал
4. И какова ваша фактическая ошибка / результат, который вы получаете с помощью кода, который вы пробовали? (Позвольте мне угадать, возможно, это как-то связано с
</TLL>
летними каникулами? ;))5. летние каникулы? ЧТО?
Ответ №1:
Вы могли бы попробовать что-то вроде этого:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
XmlNodeList nodeList;
XmlNode root = doc.DocumentElement;
nodeList=root.SelectNodes("descendant::mainFile");
foreach (XmlNode n in nodeList)
{
XmlNodeList des = n.SelectNodes("descendant::DE");
foreach (XmlNode de in nodeList)
{
de.ParentNode.RemoveChild(de);
}
}