I have a number of xml documents from which I want to retrieve all of the entity references and perform some updates on the documents. I am using an XmlDocument object to do the updates. What is the best way to retrieve all entity references from an XmlDocument object?
This may not be the best or most efficient solution, but in light of the fact that I did not receive any other answers, this is what I came up with:
XmlTextReader reader = new XmlTextReader(stream);
reader.EntityHandling = EntityHandling.ExpandCharEntities;
XmlDocument doc = new XmlDocument();
doc.Load(reader);
List<XmlEntityReference> entityRefs = new List<XmlEntityReference>();
RetrieveEntityRefs(doc.DocumentElement, doc, entityRefs);
private void RetrieveEntityRefs(XmlNode parentNode, XmlDocument doc, List<XmlEntityReference> entityReferences) {
foreach (XmlNode node in parentNode.ChildNodes)
{
if (node.NodeType == XmlNodeType.EntityReference) {
XmlEntityReference entityRef = node as XmlEntityReference;
entityReferences.Add(entityRef);
}
else if (node.HasChildNodes) {
RetrieveEntityRefs(node, doc, entityReferences);
}
}
}