在c#中将xml转换成数组
Convert xml into array in c#
我有一个 XML 文件,我想将其转换为数组。我已经尝试使用 Xmlserialzer class 并且它正在工作,但由于某些原因我不允许在我的项目中使用它。我看过一些解决方案,但其中 none 符合我的要求。请就此指导我。下面是示例 XML 文件。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PatientRecord>
<Patient>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<Age>46</Age>
</Patient>
<Patient>
<FirstName>Martha</FirstName>
<LastName>Stewart</LastName>
<Age>51</Age>
</Patient>
</PatientRecord>
数组必须是这样的:
{"Firstname", "LastName", "Age"}
{"John","Smith","46"}
{"Martha", "Stewart", "51"}
我尝试过的:
XmlReader xmlFile;
xmlFile = XmlReader.Create(inputPath, new XmlReaderSettings());
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml(xmlFile);
int row_count = ds.Tables[0].Rows.Count;
int col_count = ds.Tables[0].Columns.Count;
string[,] data = new string[row_count, col_count];
for(int i = 0; i < row_count; i++)
{
for(int j = 0; j < row_count+1; j++)
{
data[i, j] = ds.Tables[0].Rows[i][j].ToString();
data[i, j] = ds.Tables[0].Rows[i][j].ToString();
data[i, j] = ds.Tables[0].Rows[i][j].ToString();
}
}
我尝试创建一个二维数组,它获取值而不是标签。
我假设 Configuration
也有一个结束元素,所以,您的 xml 是有效的。
这是您可以使用 DataTable
获得所需输出的方法
收集有关列的信息
DataTable dt = ds.Tables[1];
var columns = new List<string>();
foreach (DataColumn dc in dt.Columns)
{
if (dc.ColumnMapping == MappingType.Hidden) continue;
columns.Add(dc.ColumnName);
}
Tables[0]
没有包含太多有价值的信息
- 另一方面
Tables[1]
if
语句确保您跳过 PatientRecord_Id
动态生成的列
- 如果你真的需要数组,你可以在
columns
上调用 ToArray
。
收集行的信息
var rows = new List<List<string>>();
foreach (DataRow dr in dt.Rows)
{
var row = new List<string>();
foreach (DataColumn dc in dt.Columns)
{
if (dc.ColumnMapping == MappingType.Hidden) continue;
row.Add(dr[dc].ToString());
}
rows.Add(row);
}
- 这里不能使用
dr.ItemArray
作为内循环
- 这样你就不能忽略生成的列的值
免责声明:我使用了 List<string>
和 List<List<string>>
以便 post 关注 DataTable API用法。
我有一个 XML 文件,我想将其转换为数组。我已经尝试使用 Xmlserialzer class 并且它正在工作,但由于某些原因我不允许在我的项目中使用它。我看过一些解决方案,但其中 none 符合我的要求。请就此指导我。下面是示例 XML 文件。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PatientRecord>
<Patient>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<Age>46</Age>
</Patient>
<Patient>
<FirstName>Martha</FirstName>
<LastName>Stewart</LastName>
<Age>51</Age>
</Patient>
</PatientRecord>
数组必须是这样的:
{"Firstname", "LastName", "Age"}
{"John","Smith","46"}
{"Martha", "Stewart", "51"}
我尝试过的:
XmlReader xmlFile;
xmlFile = XmlReader.Create(inputPath, new XmlReaderSettings());
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml(xmlFile);
int row_count = ds.Tables[0].Rows.Count;
int col_count = ds.Tables[0].Columns.Count;
string[,] data = new string[row_count, col_count];
for(int i = 0; i < row_count; i++)
{
for(int j = 0; j < row_count+1; j++)
{
data[i, j] = ds.Tables[0].Rows[i][j].ToString();
data[i, j] = ds.Tables[0].Rows[i][j].ToString();
data[i, j] = ds.Tables[0].Rows[i][j].ToString();
}
}
我尝试创建一个二维数组,它获取值而不是标签。
我假设 Configuration
也有一个结束元素,所以,您的 xml 是有效的。
这是您可以使用 DataTable
获得所需输出的方法
收集有关列的信息
DataTable dt = ds.Tables[1];
var columns = new List<string>();
foreach (DataColumn dc in dt.Columns)
{
if (dc.ColumnMapping == MappingType.Hidden) continue;
columns.Add(dc.ColumnName);
}
Tables[0]
没有包含太多有价值的信息- 另一方面
Tables[1]
- 另一方面
if
语句确保您跳过PatientRecord_Id
动态生成的列- 如果你真的需要数组,你可以在
columns
上调用ToArray
。
收集行的信息
var rows = new List<List<string>>();
foreach (DataRow dr in dt.Rows)
{
var row = new List<string>();
foreach (DataColumn dc in dt.Columns)
{
if (dc.ColumnMapping == MappingType.Hidden) continue;
row.Add(dr[dc].ToString());
}
rows.Add(row);
}
- 这里不能使用
dr.ItemArray
作为内循环- 这样你就不能忽略生成的列的值
免责声明:我使用了 List<string>
和 List<List<string>>
以便 post 关注 DataTable API用法。