2011-01-05 51 views
1

我想使用dataset.readxml从xml文件中检索一些数据。但是,我的xml格式不是很好的格式,一部分是数据集,另一部分是其他东西。我检索数据集part.i我用C#.net 2008.xml文件格式开发如下。使用DataSet.ReadXML的一些问题

<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> 

问候

+0

你的接受度是相当低的。我在其他一些问题上看到,你有什么似乎是正确的答案,但并未接受这样的答案。我错了吗? – 2011-01-05 10:41:44

回答

1

为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); 

数据内容的数据集部分

1

一些事情这样呢? (其中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"]; 
+0

如果加载的格式不正确xml .. doc.LoadXml(xmlTest);会抛出异常 – Mahantesh 2011-01-05 10:55:33

+0

如果加载的XML格式不正确,则可能没有DataSet节点。 但是你是对的,例外必须处理。 – kerrubin 2011-01-05 10:57:37

+0

在上面的问题中,他提到他的xml内容格式不正确。 – Mahantesh 2011-01-05 11:01:47

1

你可以使用一些这样的事:

XmlTextReader xmlreader = new XmlTextReader(strfilename); 
xmlreader.ReadToFollowing("sometext"); 
xmlreader.ReadToDescendant("textundersometext");