我正在解析xml文件并将其存储在OrderedDictionary数据类型中,其中xml标记名称为“key”,其innerXML为“value”。在读取值并将其存储在OrderedDictionary变量中之前,工作正常。
Screenshot showing Debugger OrderedDictionary values
当我尝试使用OrderedDictionary
阅读KeyValuePair
时,键Fees
的值显示为False
并抛出System.InvalidCastException。我知道这是一个类型转换问题,但我的问题是存储为'string'的值如何转换为'boolean'。
Image hyperlink - KeyValuePair shows Fees
as False
这是处理此任务的一小段代码:
for (int j = 0; j < intXmlRecordFieldCount; j++) {
XmlTagname = xmlRootNode.ChildNodes[i].ChildNodes[j].Name.ToString().Trim();
xmlTagInnerValue = xmlRootNode.ChildNodes[i].ChildNodes[j].InnerXml.ToString().Trim();
DictXmlRecordColumns.Add(XmlTagname, xmlTagInnerValue);
}
foreach (KeyValuePair<string, string> kvp in DictXmlRecordColumns) {
string xmlTagName = kvp.Key;
string xmlInnerValue = kvp.Value;
DataRow[] resultset= dsResult.Tables[0].Select("ColumnName='"+xmlTagName+"'");
Console.WriteLine(resultset.Length);
if (Int32.Parse(xmlInnerValue) >= MinValue&& Int32.Parse(xmlInnerValue) <= MaxValue) {
string QueryParamColumnNames = null;
string QueryParamColumnValues = null;
foreach (KeyValuePair<string, string> SqlQueryParams in SqlQueryParams) {
QueryParamColumnNames += SqlQueryParams.Key.Trim() + ',';
QueryParamColumnValues += convertToSqlParams(SqlQueryParams.Value.Trim()) + ',';
}
QueryParamColumnValues = QueryParamColumnValues.TrimEnd(',');
sqlInsertQueries.Add("INSERT INTO " + dbTableName + " (" + QueryParamColumnNames + ") values( " + QueryParamColumnValues + ")");
}
这是我打算解析的样本xml
<studentrecords>
<STUDENT_RECORDS>
<RollNumber>1</RollNumber>
<Name>Akshay</Name>
<Gender>Male</Gender>
<Fees>900.00</Fees>
</STUDENT_RECORDS>
<STUDENT_RECORDS>
<RollNumber>2</RollNumber>
<Name>Alex</Name>
<Age>8</Age>
<Gender>Male</Gender>
<Fees>900.00</Fees>
</STUDENT_RECORDS>
</studentrecords>
有人可以帮我解决这个问题吗?
编辑(1):我希望Fees
被提取为900.00
,但它是如何转换为布尔值的。我可以通过哪种方式避免这种情况?
编辑(2):添加了XML示例
答案 0 :(得分:0)
通过修复代码行解决了这个问题
foreach (KeyValuePair<string, string> kvp in DictXmlRecordColumns)
来
MSDN中所述的foreach (DictionaryEntry de in DictXmlRecordColumns)
。
它奏效了。
感谢您的时间并帮助每个人。