Некоторые проблемы при использовании DataSet.ReadXML
Я хочу использовать dataset.readxml для извлечения некоторых данных из файла XML. Но мой формат XML не очень хорошо отформатирован, одна часть предназначена для набора данных, а другая часть для других вещей. Так, как я получаю часть набора данных. Я разрабатываю в Формат файла C#.net 2008.xml подобен ниже.
<Object type="Sample">
<Object type="Tool">
<Property name="Text">Prescription1</Property>
<Property name="Name">Prescription1</Property>
<Object type="TextBox">
<Property name="Text">Singapore</Property>
<Property name="Name">TextBox2</Property>
</Object>
<DataSet> //This Part
<TableOne>
<ItemID>001</ItemID>
<ItemName>Item001</ItemName>
<Price>100</Price>
</TableOne>
<TableOne>
<ItemID>002</ItemID>
<ItemName>Item002</ItemName>
<Price>200</Price>
</TableOne>
</DataSet>
</Object>
С уважением
Chong
3 ответа
Решение
Поскольку формат xml не очень хорошо подходит, использовать синтаксический анализатор DOM невозможно. Таким образом, вы можете манипулирование строк
string fileContent = System.IO.File.ReadAllText(@"sample.xml");
int firstIndex = fileContent.IndexOf("<DataSet>", 0);
int lastIndex = fileContent.IndexOf("</DataSet>", firstIndex);
string data = fileContent.Substring(firstIndex + "<DataSet>".Length, lastIndex - firstIndex - "<DataSet>".Length);
Данные содержат часть вашего набора данных
Вы можете использовать что-то вроде этого:
XmlTextReader xmlreader = new XmlTextReader(strfilename);
xmlreader.ReadToFollowing("sometext");
xmlreader.ReadToDescendant("textundersometext");
Что-то вроде того? (где xmlTest - строка, содержащая ваш XML)
XmlDocument doc = new XmlDocument();
// Get the Xml
doc.LoadXml(xmlTest);
// Get your DataSet Node
XmlNode node = doc.SelectSingleNode("Object/DataSet");
DataSet ds = new DataSet();
// Read your node
ds.ReadXml(new StringReader(node.OuterXml));
// Read your daat
string value = ds.Tables["TableOne"].Rows[0]["ItemID"];