0

I have one XmlNodeList, I want to create two XmlNodeList out of this. I will be checking for some tag inside each item in List, on the basis of that tag presence I will be adding them to one of the list which I have defined.

I was trying to add the list but I did not any method to add the particular item to a new XmlNodeList which is null in the start . Please help out. What I am missing here.

I have tried List<XmlNode> , it is throwing error System.ArgumentNullException: 'Value cannot be null. Parameter name: source'

class Program
    {
        static void Main(string[] args)
        {
            //Import XMl 
            // XmlNode list as name NEW

            foreach(XmlNode emp in NEW)
            {
                if (emp != null)
                {
                    AddNewList(emp);
                }

            }
        } 

        public static void AddNewList(XmlNode emp)
        {
            //Checking for some tag 
            if(tag!=null)
            {
                // It is throwing error 
                currentList.Append(emp);
            }
        }

        public XmlNodeList currentList = null;
        public XmlNodeList previousList = null;
    }
}
7
  • You have to create the XmlNode from some XmlDocument, then add it into the XmlDocument DOM hierarchy. an XmlNodeList is just a filtered set of nodes from a document, to add to the list you have to add to the document in such a way that it gets included in the filter. This is one of the reasons it might be easier to switch to LINQ to XML and XElement by the way. See: How to create an XML document using XmlDocument?. Commented Nov 1, 2019 at 17:57
  • 1
    What you expect to happen at the end? XmlNodeList is result of running select query and it is not really possibly to add node to selection in general case... Commented Nov 1, 2019 at 17:59
  • @dbc I don't want to add XmlNodes to existing Xml, I just to add the items in different XmlNodeList on the given conditon Commented Nov 1, 2019 at 18:06
  • @AlexeiLevenkov At the end I want each item which is in NEW, either it should be in currentList or previousList Commented Nov 1, 2019 at 18:08
  • You can't do that with XmlNodeList which is a filtered view into an XmlDocument. From the docs: Changes to the children of the node object that the XmlNodeList collection was created from are immediately reflected in the nodes returned by the XmlNodeList properties and methods. XmlNodeList supports iteration and indexed access. Better to switch to LINQ to XML and XElement. Commented Nov 1, 2019 at 18:36

1 Answer 1

0

The only way to have items in XmlNodeList is to run selection query on XmlNode. There is no other way to construct XmlNodeList.

So the only option to "split" XmlNodeList in two XmlNodeList is to run separate XPath queries with opposite conditions that will select nodes into separate lists.

Note that XmlNodeList is not List<XmlNode> despite very similar name - adding to List<XmlNode> is indeed possible.

Sign up to request clarification or add additional context in comments.

1 Comment

I have tried with List<XmlNode>, but it throwing error System.ArgumentNullException: 'Value cannot be null. Parameter name: source'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.