c# - C# XML 多个子子项
问题描述
再会!我正在尝试使用数据集解析 XML 子子项。问题是当它具有多个值时它不会读取“SiteCode”。
例如:
string filePath = @"" + _clsPathIntervalSttngs.localPath + "/" + "hehe.xml";
DataSet dataSet = new DataSet()
dataSet.ReadXml(filePath, XmlReadMode.InferSchema);
// Then display informations to test
foreach (DataTable table in dataSet.Tables)
{
Console.WriteLine(table);
for (int i = 0; i < table.Columns.Count; ++i)
{
Console.Write("\t" + table.Columns[i].ColumnName.Substring(0, Math.Min(6, table.Columns[i].ColumnName.Length)));
Console.WriteLine();
}
foreach (var row in table.AsEnumerable())
{
for (int i = 0; i < table.Columns.Count; ++i)
{
Console.Write("\t" + row[i]);
}
Console.WriteLine();
}
}
这就是它正在返回的内容。
它返回 0 值并选择产品而不是站点代码。
我哪里做错了?
解决方案
您可能需要检查代码,因为我只是拿了一些类似的东西,然后将其更改为查看您的文档层次结构。我也没有使用DataSet
. 考虑以下代码:
var filePath = "<path to your file.xml>";
var xml = XDocument.Load(filePath);
var items = from item in xml.Descendants("Product").Elements()
select item.Value;
Array.ForEach(items.ToArray(), Console.WriteLine);
这应该向您显示产品下每个元素的值。如果您想要整个元素,请删除.Value
LINQ 查询的 select 子句中的 。
更新
我现在投影到匿名类型。对于文件中的每个 Product 元素,您将获得其中之一。
var items = from item in dataset.Descendants("Product")
select new
{
RefCode = item.Element("RefCode").Value,
Codes = string.Join(", ", item.Elements("SiteCode").Select(x => x.Value)),
Status = item.Element("Status").Value
};
Array.ForEach(items.ToArray(), Console.WriteLine);
我已将代码展平为逗号分隔的字符串,但您可以根据需要保留IEnumerable
or ToList
。
推荐阅读
- c# - c#代码以特定用户的身份获取Intranet应用程序的http响应代码
- azure-active-directory - 在不存储客户端密码的情况下与 Azure AD OAuth 交互
- mysql - Mysql,如何组合连接查询的结果?
- javascript - 如何从外部 JSON 文件访问数据以在记事本中的 javascript 文件(没有 JQuery)中使用
- macos - 在 Python 中打开文件夹内的文件
- cross-domain - 当我使用 API 检索 GIF 时,跨源读取阻止正在阻止响应
- flutter - TabBar 和 TabView 没有 Scaffold 和固定的 Widget
- python - 如何使用 JSON 日期格式?
- android - Retrofit 无法在 Android 应用程序中下载二进制文件 - 最终结果是文件损坏,比预期大
- python - 循环图表仅选定的项目