Search code examples
c#.netxmlxmldocument

How Can I Retrieve All XmlEntityReference Objects In An XmlDocument Object?


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?


Solution

  • 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);
            }
        }
    }