在c#.net中解析xml

本文关键字:xml net | 更新日期: 2023-09-27 18:00:11

我必须在C#中解析以下xml

<Packages>
      <Package>
         <PackageName>Create_Staging_Table</PackageName>
         <SequenceID>1</SequenceID>
         <AlwaysRun>True</AlwaysRun>
      </Package>
        <Package>
         <PackageName>Indigo_Staging_Load</PackageName>
         <SequenceID>2</SequenceID>
         <AlwaysRun>True</AlwaysRun>
      </Package>
        <Package>
         <PackageName>Indiogo_Load_Package</PackageName>
         <SequenceID>3</SequenceID>
         <AlwaysRun>True</AlwaysRun>
      </Package>
   </Packages>

我试过

XmlDocument doc = new XmlDocument();
             doc.Load(filePath);
             XmlNode PackagesListNode = doc.SelectSingleNode("/Packages");
             XmlNodeList Packages = PackagesListNode.SelectNodes("Package");
             foreach (XmlNode node in Packages)
             {
                 TableLoadInstruction instruction = new TableLoadInstruction();
                 instruction.PackageName = node.Attributes.GetNamedItem("PackageName").Value;
                 instruction.Sequence = Convert.ToInt16(node.Attributes.GetNamedItem("SequenceID").Value);
                 instruction.AlwaysRun = Convert.ToBoolean(node.Attributes.GetNamedItem("AlwaysRun").Value);
                 loadInstructions.Add(instruction);
             }

我在节点上遇到了类似"对象引用未设置为对象实例"的错误。自节点以来的Attributes.GetNamedItem("PackageName").value。Attributes.GetNamedItem("PackageName")为"null"

在c#.net中解析xml

由于PackageName不是一个属性,所以您尝试做的操作不会起作用。您必须查看Package的子节点。

最终得到解决方案

XmlDocument doc = new XmlDocument();
             doc.Load(filePath);
             XmlNode PackagesListNode = doc.SelectSingleNode("/Packages");
             XmlNodeList Packages = PackagesListNode.SelectNodes("Package");
             foreach (XmlNode node in Packages)
             {
                 TableLoadInstruction instruction = new TableLoadInstruction();
                 instruction.PackageName = node.SelectSingleNode("PackageName").InnerText;
                 instruction.Sequence = Convert.ToInt16(node.SelectSingleNode("SequenceID").InnerText);
                 instruction.AlwaysRun = Convert.ToBoolean(node.SelectSingleNode("AlwaysRun").InnerText);
                 loadInstructions.Add(instruction);
             }

您正在寻找PackageName,它是节点中的阳极。属性,所以我认为您永远不会得到这个xml的值。这是你的问题吗?