alejandro carnero
alejandro carnero

Reputation: 1784

Read first root node from XML

I work with three kinds of XML files :

Type A:

<?xml version="1.0" encoding="UTF-8"?>
<nfeProc versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
</nfeProc>

Tyepe B:

<?xml version="1.0" encoding="UTF-8"?>
<cancCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
</cancCTe>

Type C:]

<?xml version="1.0" encoding="UTF-8"?>
<cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
</cteProc>

I have try with this code to read the first node :

     XmlDocument xmlDoc = new XmlDocument();
     xmlDoc.Load(@"C:\crruopto\135120068964590_v01.04-procCTe.xml");
     XmlNodeList ml = xmlDoc.GetElementsByTagName("*");
     XmlElement root = xmlDoc.DocumentElement;
     exti = root.ToString();

but dont return anything i want to read the first node , need to know if the file is nfeProc ,canCTE or cteProc The second question is how i get the value from "value" in the same tag???

Thanks

Upvotes: 2

Views: 19753

Answers (6)

Suncat2000
Suncat2000

Reputation: 1086

First, to be clear, you're asking about the root element, not the root node.

You can use an XmlReader to avoid having to load large documents completely into memory. See my answer to a how to find the root element at https://stackoverflow.com/a/60642354/1307074.

Second, once the reader is referencing the element, you can use the reader's Name property to get the qualified tag name of the element. You can get the value as a string using the Value property.

Upvotes: 0

alejandro carnero
alejandro carnero

Reputation: 1784

Thanks i have solved this way the first part

   XmlDocument xmlDoc = new XmlDocument();
   xmlDoc.Load(nomear);
   XmlNodeList ml = xmlDoc.GetElementsByTagName("*");
   XmlNode primer = xmlDoc.DocumentElement;
   exti = primer.Name;  

Upvotes: 0

Jesse Carter
Jesse Carter

Reputation: 21167

Working with Linq to XML is the newest and most powerful way of working with XML in .NET and offers you a lot more power and flexibility than things like XmlDocument and XmlNode.

Getting the root node is very simple:

XDocument doc = XDocument.Load(@"C:\crruopto\135120068964590_v01.04-procCTe.xml");
Console.WriteLine(doc.Root.Name.ToString());

Once you have constructed an XDocument you don't need to use any LINQ querying or special checking. You simply pull the Root property from the XDocument.

Upvotes: 0

Joel Rondeau
Joel Rondeau

Reputation: 7586

If you aren't required to use the XmlDocument stuff, then Linq is your friend.

XDocument doc = XDocument.Load(@"C:\crruopto\135120068964590_v01.04-procCTe.xml");
XElement first = doc.GetDescendants().FirstOrDefault();
if(first != null)
{
  //first.Name will be either nfeProc, canCTE or cteProc.
}

Upvotes: 0

evgenyl
evgenyl

Reputation: 8117

From this post:

//Root node is the DocumentElement property of XmlDocument

XmlElement root = xmlDoc.DocumentElement

//If you only have the node, you can get the root node by

XmlElement root = xmlNode.OwnerDocument.DocumentElement

Upvotes: 3

jropella
jropella

Reputation: 589

I would suggest using XPath. Here's an example where I read in the XML content from a locally stored string and select whatever the first node under the root is:

XmlDocument doc = new XmlDocument();
doc.Load(new StringReader(xml));

XmlNode node = doc.SelectSingleNode("(/*)");

Upvotes: 1

Related Questions