从 XML 文件中检索值
Retrieve values from XML File
我有多个 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)table,名称(例如;sp_year)作为列名,值(例如;2015)作为使用 ASP.NET C# 的列值。
我想我可以上传文件并像这样阅读它:
string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string filePath = Server.MapPath("~/Uploads/") + fileName;
FileUpload1.SaveAs(filePath);
string xml = File.ReadAllText(filePath);
但仅此而已(对不起,我是初学者)。请指导我。谢谢
要从 xml 文件中读取数据,您不需要上传 it.You 可以给出 xml 的路径并从 it.You 中读取可以使用以下方法阅读 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
下面的答案显示了如何从中创建 Xml文档。
如果您知道 Xml 架构是否更改,我建议将其用作 User-Defined class。
首先,您应该使用 Xml 注释创建适合 Xml 文件架构的 POCO class。
第二:
具有文件路径:
XmlSerializer serializer = new XmlSerializer(typeof(definedclass));
using (FileStream fs = File.Open(pathtofile))
using (XmlReader reader = XmlReader.Create(fs))
{
var xmlObject = serializer.Deserialize(reader);
}
xml对象现在是您的 user-defined class,其值来自 xml。
问候,
拉法尔
您可以使用以下代码获取键值对
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);
}
元素方法returns 架构元素内的所有元素。
不过,我建议尽可能将 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>
您可以将文件加载到 XDocument 中,然后使用 Linq-To-XML 提取所需信息。下面的示例代码将所有 name/value 对加载到 class 的数组中:
class MyXMLClass
{
public String FieldName { get; set; }
public String Value { get; set; }
}
代码获取所有 "schema" 个后代(只有一个,因为它是顶级元素),然后选择 & 创建一个新的 class 对象,每个元素提取名称和值.
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();
我有多个 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)table,名称(例如;sp_year)作为列名,值(例如;2015)作为使用 ASP.NET C# 的列值。 我想我可以上传文件并像这样阅读它:
string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string filePath = Server.MapPath("~/Uploads/") + fileName;
FileUpload1.SaveAs(filePath);
string xml = File.ReadAllText(filePath);
但仅此而已(对不起,我是初学者)。请指导我。谢谢
要从 xml 文件中读取数据,您不需要上传 it.You 可以给出 xml 的路径并从 it.You 中读取可以使用以下方法阅读 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
下面的答案显示了如何从中创建 Xml文档。 如果您知道 Xml 架构是否更改,我建议将其用作 User-Defined class。 首先,您应该使用 Xml 注释创建适合 Xml 文件架构的 POCO class。 第二: 具有文件路径:
XmlSerializer serializer = new XmlSerializer(typeof(definedclass));
using (FileStream fs = File.Open(pathtofile))
using (XmlReader reader = XmlReader.Create(fs))
{
var xmlObject = serializer.Deserialize(reader);
}
xml对象现在是您的 user-defined class,其值来自 xml。 问候, 拉法尔
您可以使用以下代码获取键值对
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);
}
元素方法returns 架构元素内的所有元素。
不过,我建议尽可能将 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>
您可以将文件加载到 XDocument 中,然后使用 Linq-To-XML 提取所需信息。下面的示例代码将所有 name/value 对加载到 class 的数组中:
class MyXMLClass
{
public String FieldName { get; set; }
public String Value { get; set; }
}
代码获取所有 "schema" 个后代(只有一个,因为它是顶级元素),然后选择 & 创建一个新的 class 对象,每个元素提取名称和值.
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();