如何读取XML节点属性?

How to Read XML node attributes?

大家好,下面是我的XML文件。

<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>

以上 XML 文件包含 parent root 作为 Print,以及 child 节点作为 part. 我想读取 child 个节点及其在 C# 中的属性。如果 XML 文件包含 unique 节点名称,那么我可以读取它们。但是,如果所有 child 都包含相同的节点名称,那么我们如何读取它们。

如果我理解你的问题,你应该这样做:

//...
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
    }
}