J'essaie d'ajouter un attribut "index" à tous les nœuds XML en utilisant la récursivité en C#. Mon problème est que lorsque j'essaie d'ajouter un attribut à un nœud qui n'a pas de nœuds enfants, il échoue avec une référence nulle. par exemple, pour un simple fichier XML (html) Je veux que ce soit comme ça:Indexation XML récursivement avec xmldocument
<div index="1">
<div index="1.1">
<h2 index="1.1.1">some text1</h2>
<h2 index="1.1.2">some text</h2>
</div>
</div>
<div index="2">
<table index="2.1">
<tr index="2.1.1">
<td index="2.1.1.1">some cell</td>
<td index="2.1.1.2">some cell</td>
</tr>
<tr index="2.1.2">
<td index="2.1.2.1">some cell</td>
</tr>
</table>
</div>
<div index="3">
<h1 index="3.1">some text</h1>
</div>
Ma fonction ressemble maintenant à ceci:
public static string TraverseNodes(XmlNode node,XmlDocument xmlDoc,bool isChild)
{
int i = 1;
foreach (XmlNode subNode in node)
{
var child = subNode.ChildNodes[i];
if (subNode.ChildNodes[i] != null)
{
XmlAttribute typeAttr = xmlDoc.CreateAttribute("realIndex");
typeAttr.Value = (isChild ? (i+ ".") : "") + (i + 1);
subNode.Attributes.Append(typeAttr);
}
i++;
TraverseNodes(subNode, xmlDoc, isChild);
}
return PrintXml(xmlDoc);
}
peut-être mon approche tout est faux. je serais heureux pour toute aide.
peut-on utiliser LINQ pour XML au lieu de XmlDocument? Il est certainement possible d'écrire ce code avec XmlDocument, mais LINQ to XML est beaucoup plus propre ... (Votre échantillon serait plus facile à lire avec indentation, btw ...) –
Cela peut être LINQ. Une bonne idée comment l'obtenir? \ – Basilf
Vous avez déjà du code - que se passe-t-il quand vous essayez? (Et pourquoi renvoyez-vous une chaîne de cela?) –