【问题标题】:Retrieve values from XML File从 XML 文件中检索值
【发布时间】:2016-01-13 18:48:35
【问题描述】:

我有多个如下所示的 XML 文件

<?xml version="1.0" encoding="UTF-8"?>
<schema>
<sp_transaction_id name="sp_transaction_id" value="1" />
<sp_year name="sp_year" value="2015" />
<sp_first_name name="sp_first_name" value="James" />
<sp_gender name="sp_gender" value="Male" />
<sp_date_of_birth name="sp_date_of_birth" value="06-06-1999" />
</schema>

我认为 XML 格式是键值对。 我想提取这些值并将其存储到数据库(SQL Server 2012)表中,使用 ASP.NET C# 将名称(例如 sp_year)作为列名,将值(例如 2015)作为列值。 我想我可以像这样上传文件并阅读它:

string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string filePath = Server.MapPath("~/Uploads/") + fileName;
FileUpload1.SaveAs(filePath);
string xml = File.ReadAllText(filePath);

但仅此而已(对不起,我是初学者)。请指导我。谢谢

【问题讨论】:

    标签: c# asp.net xml key-value


    【解决方案1】:

    可以使用以下代码获取键值对

    XDocument doc = XDocument.Load(filePath);
    var schemaElement = doc.Element("schema");
    foreach (var xElement in schemaElement.Elements())
        {
            Console.WriteLine(xElement.Attribute("name").Value + ":" + xElement.Attribute("value").Value);
        }
    

    Elements 方法返回架构元素内的所有元素。

    不过,如果可能的话,我建议将 xml 文件更改为这种格式

    <?xml version="1.0" encoding="UTF-8"?>
    <schema>
    <KeyValuePair name="sp_transaction_id" value="1" />
    <KeyValuePair name="sp_year" value="2015" />
    <KeyValuePair name="sp_first_name" value="James" />
    <KeyValuePair name="sp_gender" value="Male" />
    <KeyValuePair name="sp_date_of_birth" value="06-06-1999" />
    </schema>
    

    【讨论】:

    • 感谢您的帮助,这个答案帮助我解决了我的问题....非常感谢
    【解决方案2】:

    从xml文件中读取数据不需要上传。你可以给出xml的路径并从中读取。你可以使用以下方法从xml中读取

    public static XmlDocument LoadXmlDocument(string xmlPath)
        {
            if ((xmlPath == "") || (xmlPath == null) || (!File.Exists(xmlPath)))
                return null;
    
            StreamReader strreader = new StreamReader(xmlPath);
            string xmlInnerText = strreader.ReadToEnd();
            strreader.Close();
    
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xmlInnerText);
    
            return xmlDoc;
        }
    

    对于从 xml 读取数据,您可以使用

    XmlDocument xmlDoc = LoadXmlDocument(xmlPath);
    
    XmlNodeList nodes = xmlDoc .SelectNodes("//*");
    
                    foreach (XmlElement node in nodes)
                    {
                      .
                      .
                      .
                    }
    

    在 foreach 循环中,您可以获得所需的值,例如 sp_year

    【讨论】:

      【解决方案3】:

      下面的答案显示了如何从中创建 XmlDocument。 如果您知道 Xml 架构是否更改,我建议将其用作用户定义的类。 首先,您应该使用 XmlAnnotations 创建适合于 Xml 文件架构的 POCO 类。 第二: 有文件的路径:

      XmlSerializer serializer = new XmlSerializer(typeof(definedclass));
      using (FileStream fs = File.Open(pathtofile))
      using (XmlReader reader = XmlReader.Create(fs))
      {
          var xmlObject = serializer.Deserialize(reader); 
      }
      

      xmlObject 现在是您的用户定义类,其值来自 xml。 问候, 拉法尔

      【讨论】:

        【解决方案4】:

        您可以将文件加载到 XDocument 中,然后使用 Linq-To-XML 提取所需的信息。下面的示例代码将所有名称/值对加载到类数组中:

        class MyXMLClass
        {
          public String FieldName { get; set; }
          public String Value { get; set; }
        }
        

        代码获取所有“模式”后代(只有一个,因为它是顶级元素),然后选择 & 中的所有元素,为每个提取名称和值创建一个新的类对象。

          XDocument xd = XDocument.Load("test.xml");
          MyXMLClass[] xe =
            xd.Descendants("schema")
              .Elements()
              .Select(n => new MyXMLClass {FieldName = n.Attribute("name").Value, Value = n.Attribute("value").Value})
              .ToArray();
        

        【讨论】:

          猜你喜欢
          • 2018-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          相关资源
          最近更新 更多