简体   繁体   中英

How to Read XML node attributes?

Hi all below is my XML file.

<print>      
    <part keyName="logo" fontName="" fontSize="" fontColor="" bold="" italic="" underline="" maxWidth="45" textAlign="center" isBarcode="" isImage="true">
        <logo>testimg.jpg</logo>
    </part>      
    <part keyName="header" fontName="" fontSize="" fontColor="" bold="" italic="" underline="" maxWidth="45" textAlign="center" isBarcode="" isImage="">
        <SpaceSep>0</SpaceSep>
        <LineSep>1</LineSep>
        <text fontSize="20">Tax Invoice</text>
        <LineSep>1</LineSep>
        <text>Test Pvt Ltd</text>
        <LineSep>1</LineSep>
        <address/>
        <area/>
        <city/>
        <state/>
        <pin/>
        <country/>
        <LineSep>1</LineSep>
        <text>Phone: </text>
        <phone></phone>
        <LineSep>1</LineSep>
        <text>GSTIN: </text>
        <gstIn></gstIn>
        <LineSep>1</LineSep>
    </part>
</print>

Above XML file contains parent root as Print , And child nodes as part . I want to read child nodes and it's attributes in C#. If XML file contains unique node names then I can read them. But if all child's contains same node name then how can we read them.

If i'm understanding well your question, you should do something like that:

//...
using System.Linq;
using System.Xml.Linq;
//...

XDocument doc = XDocument.Load(@"C:\directory\file.xml");
IEnumerable<XElement> partElements = doc.Root.Elements("part");

foreach (XElement partElement in partElements)
{
    // read attribute value
    string keyName = partElement.Attribute("keyName")?.Value;

    //...

    // iterate through childnodes
    foreach (XElement partChildElement in partElement.Elements())
    {
        // check the name
        if (partChildElement.Name == "SpaceSep")
        {
            int value = (int)partChildElement; // casting from element to its [int] content

            // do stuff for <SpaceSep> element
        }
        else if (partChildElement.Name == "text")
        {
            string text = (string)partChildElement; // casting from element to its [string] content

            // do stuff for <text> element
        }

        // and so on for all possible node name
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM