C# XML 解析 - 根级别的数据无效。第 1 行,位置 1
Posted
技术标签:
【中文标题】C# XML 解析 - 根级别的数据无效。第 1 行,位置 1【英文标题】:C# XML Parsing - Data at the root level is invalid. Line 1, position 1 【发布时间】:2020-12-19 00:22:34 【问题描述】:我正在尝试解析以下 XML:
<connector_attribute_validation>
<use_ssl>
<required>1</required>
<type>1</type>
</use_ssl>
<size>
<required>1</required>
<type>1</type>
</size>
</connector_attribute_validation>
我的代码如下:
public static Dictionary<string, Dictionary<string, string>> ValidateConnectorAttributes(string xmlString)
try
Dictionary<string, Dictionary<string, string>> validation = new Dictionary<string, Dictionary<string, string>>();
XElement root = XElement.Parse(xmlString);
foreach (XElement attribute in root.Elements())
Dictionary<string, string> attributeInfo = new Dictionary<string, string>();
foreach (XElement attributeInformation in attribute.Elements())
attributeInfo.Add(attributeInformation.Name.LocalName, attributeInformation.Value);
validation.Add(attribute.Name.LocalName, attributeInfo);
foreach (KeyValuePair<string, Dictionary<string, string>> Attribute in validation)
Console.WriteLine(Attribute.Key + " : ");
foreach (KeyValuePair<string, string> AttributeValues in Attribute.Value)
Console.WriteLine(AttributeValues.Key + " : " + AttributeValues.Value);
Console.WriteLine("=========");
return validation;
catch (Exception e)
Console.WriteLine(e.ToString());
return null;
我收到错误消息:根级别的数据无效。第 1 行,位置 1。
我在这里做错了什么?我的目标是将 XML 转换为字典中的字典。 所以我正在寻找类似的东西:
<use_ssl, <required, 1> <type, 1>>
我要解析的确切 XML 如下:
<connector_attributes_validations>
<use_ssl>
<required>0</required>
<type>string</type>
<default></default>
<valid_values>Yes|No</valid_values>
</use_ssl>
<page_size>
<required>1</required>
<type>int</type>
<default>500</default>
<valid_values></valid_values>
</page_size>
<retry_count>
<required>1</required>
<type>int</type>
<default>3</default>
<valid_values></valid_values>
</retry_count>
<query_timeout>
<required>1</required>
<type>int</type>
<default>600</default>
<valid_values></valid_values>
</query_timeout>
<domain_name>
<required>1</required>
<type>string</type>
<default></default>
<valid_values></valid_values>
</domain_name>
<ad_account_searchbase>
<required>0</required>
<type>string</type>
<default></default>
<valid_values></valid_values>
</ad_account_searchbase>
<ad_account_searchfilter>
<required>1</required>
<type>string</type>
<default></default>
<valid_values></valid_values>
</ad_account_searchfilter>
<ad_group_searchbase>
<required>0</required>
<type>string</type>
<default></default>
<valid_values></valid_values>
</ad_group_searchbase>
<ad_group_searchfilter>
<required>0</required>
<type>string</type>
<default></default>
<valid_values></valid_values>
</ad_group_searchfilter>
</connector_attributes_validations>
我添加了一个缩短版本,因为两者都不适合我,我不明白为什么。同样的错误:根级别的数据无效。
【问题讨论】:
我刚刚尝试了您发布的代码和 XML 字符串,没有出现错误。您还有其他方法通过 XML 传递吗? 我没有使用任何其他方法。所有方法都被注释掉了。 您粘贴在 EXACT 上方的 XML 是否与您的程序正在读取的内容相同? 好的,这绝对是您从文件中读取代码时遇到的问题。你能把它贴出来吗,我很乐意帮你弄明白。 非常感谢。我让它工作。看来我没有正确读取文件。以前我有 string XML = @"path" 当它应该是 string XML = System.IO.File.ReadAllText(Path); 【参考方案1】:他是另一种方法:
XDocument doc = XDocument.Load(fFILENAME);
Dictionary<string, Dictionary<string,string>> dict = doc.Root
.Elements()
.GroupBy(x => x.Name.LocalName, y => y.Elements()
.GroupBy(a => a.Name.LocalName, b => (string)b)
.ToDictionary(a => a.Key, b => b.FirstOrDefault()))
.ToDictionary(x => x.Key, y => y.FirstOrDefault());
【讨论】:
以上是关于C# XML 解析 - 根级别的数据无效。第 1 行,位置 1的主要内容,如果未能解决你的问题,请参考以下文章
xml.LoadData - 根级别的数据无效。第 1 行,位置 1
System.Xml.XmlException '根级别的数据无效,第 1 行,位置 1' 当我从 1 个 xml 文件更改为 5 时出现错误