C#XML解析指导

时间:2014-01-17 20:26:54

标签: xml-parsing

* [UPDATED] *我有一个非常复杂的XML,我曾经使用PowerBuilder和PBDOM进行解析。

我需要使用C#编写一个解析器作为Windows服务。

我已经阅读了很多教程,但它们基于非常简单的示例,其中包含一个或两个级别的XML。

我需要你对这种方法的帮助。我在这里放了一个非常小的样本。这是一个非常庞大的XML模式的一部分,但如果我了解如何在.NET中使用它,我可以应付其余部分。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
    <OTA_ResRetrieveRS xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="echo" TimeStamp="2013-11-11T16:50:20.476" Version="1.0">
        <Success/>
        <ReservationsList>
            <HotelReservation CreateDateTime="2013-11-08T20:17:52" ResStatus="Book">
                <UniqueID ID="O0" Type="414"/>
                <POS>
                    <Source>
                        <RequestorID ID="SX" Type="212"/>

我的代码

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);

    mgr.AddNamespace("df", "http://www.opentravel.org/OTA/2003/05");

    XmlNodeList ReservationsListList = doc.GetElementsByTagName("ReservationsList");

    for (int a = 0; a < ReservationsListList.Count; a++)
    {
        XmlNodeList HotelReservationList = ReservationsListList[a].SelectNodes("//df:HotelReservation",mgr);


        for (int b = 0; b < HotelReservationList.Count; b++)
        {

            XmlNodeList UniqueIDList = HotelReservationList[b].SelectNodes("/df:UniqueID", mgr);

            for (int c = 0; c < UniqueIDList.Count; c++)
            {
                string UniqueIDID = UniqueIDList[c].Attributes.GetNamedItem("ID").Value;
                string UniqueIDType = UniqueIDList[c].Attributes.GetNamedItem("Type").Value;
            }

            XmlNodeList UniqueIDList2 = HotelReservationList[b].SelectNodes("/df:POS", mgr);
            for (int c = 0; c < UniqueIDList2.Count; c++)
            {
                XmlNodeList SourceList = UniqueIDList2[c].SelectNodes("/df:Source", mgr);

                for (int d = 0; d < SourceList.Count; d++)
                {
                    XmlNodeList RequestorIDList = SourceList[d].SelectNodes("/RequestorID");

                    for (int f = 0; f < RequestorIDList.Count; f++)
                    {
                        string RequestorIDID = RequestorIDList[f].Attributes.GetNamedItem("ID").Value;
                        string RequestorIDType = RequestorIDList[f].Attributes.GetNamedItem("Type").Value;
                    }
                }
            }
        }
    }



    }

假设XML中有 20个HotelReservation 元素。每个人在 UniqueID 元素中都有一个 ID 和一个 Type

当我在第一个HotelReservation 中循环 UniqueID 时,它会循环 20次,为我提供所有 ID 和XML的类型

我用/替换了//我得空了!

你可以帮我发现错误吗?

提前完成

0 个答案:

没有答案