如何读取XML节点属性?

时间:2017-11-06 09:39:08

标签: c# .net xml xmlreader

以下是我的 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文件包含父根打印,子节点包含部分。 我想在C#中读取子节点及其属性。如果XML文件包含唯一节点名称,那么我可以读取它们。但是如果所有孩子都包含相同的节点名称,那么我们如何阅读它们。

1 个答案:

答案 0 :(得分:1)

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

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