使用C#读取XML是正确的方法吗?

时间:2012-09-14 08:33:22

标签: c# xml xml-parsing

我有一个项目,我读取从另一个系统导出的XML。 XML看起来像这样:

<?xml version="1.0" encoding="ISO-8859-1"?><xmlimexport>
    <companydata/>
    <articles/>
    <customers/>
    <suppliers/>
    <orders>
        <order>
            <atOrder>
                <OOI_HEAD_DOCUMENT_NUMBER>12345</OOI_HEAD_DOCUMENT_NUMBER>
                **... more rows ...**                       
            </atOrder>
            <rows>
                <row><OOI_ROW_ARTICLE_NUMBER>12345</OOI_ROW_ARTICLE_NUMBER><OOI_ROW_ARTICLE_TEXT>SuperDuperArticleName</OOI_ROW_TEXT>**... more data...**</row>
            </rows>
        </order>
    </orders>
    <bests/>
    <invoices/>
    <supplierinvoices/>
    <pricelists/>
    <parcels/>
</xmlimexport>

所以我要做的是加载XML文件的路径:

XmlDocument doc = new XmlDocument();

// Load xml file
doc.Load(xmlFile);

// Read order data
XmlNodeList orderList = doc.GetElementsByTagName("order");

foreach (XmlElement order in orderList)
{
    try
    {
        // Read atOrder data (single node)
        XmlNode atOrder = order.SelectSingleNode("atOrder");

        // Read article data (one or many nodes)
        XmlNodeList articles = order.GetElementsByTagName("row");

        // Create a order
        Order customerOrder = new Order();

然后用:

读取数据
customerOrder.CUS_ID = Convert.ToInt32(atOrder.SelectSingleNode("OOI_HEAD_DOCUMENT_NUMBER").InnerText);

但是因为在这些字段中它可以同时使用字符串,布尔值,日期时间,日期和INT,我发现自己必须非常使用Convert.,这是正确的方法吗?或者我应该使用不同的方法?

2 个答案:

答案 0 :(得分:2)

  • 您还可以生成XSD并基于XSD一个类来反序列化XML(short tutorial here
  • 您可以直接将XML读入DataSet(.ReadXML)

答案 1 :(得分:0)

看看LinqToXml我认为这可能会有所帮助:

http://msdn.microsoft.com/en-us/library/bb387098.aspx