简体   繁体   English

使用C#读取XML内部子节点

[英]Reading XML inner child node using c#

I am trying to read xml in c#. 我正在尝试在C#中读取xml。 I am able to read the node 'ArrayOfCruisePriceSummaryResponse' but how can i read the inner nodes. 我能够读取节点“ ArrayOfCruisePriceSummaryResponse”,但如何读取内部节点。

XmlNodeList xmlnode;
xmlnode = xml.GetElementsByTagName("CruisePriceSummaryResponse");

for (int i = 0; i <= xmlnode.Count - 1; i++)
{

}

Using GetElementsByTagName I am able to reach to that node but how can I read the inner child. 使用GetElementsByTagName我可以到达该节点,但是如何读取内部子级。 I want to read TotalPrice from BestFare and FullFare Each child has two innerchilds BestFare and FullFare and I need to read each TotalPrice . 我想从BestFareFullFare读取TotalPrice 。每个孩子都有两个内在孩子BestFareFullFare ,我需要读取每个TotalPrice

<ArrayOfCruisePriceSummaryResponse
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://schemas.datacontract.org/2004/07/OpenseasAPI.ServiceModel">
    <CruisePriceSummaryResponse>
        <AvailablePromos
            xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d3p1:string>FLA</d3p1:string>
            <d3p1:string>FLB</d3p1:string>
        </AvailablePromos>
        <Brand>PA</Brand>
        <CruiseCategory i:nil="true"/>
        <RoomSize>
            <CruisePriceSummaryRoomSize>
                <BestFare>
                    <TotalPrice>2798.0000000</TotalPrice>
                </BestFare>
                <FullFare>
                    <TotalPrice>3198.000000</TotalPrice>
                </FullFare>
                <PaxCount>2</PaxCount>
            </CruisePriceSummaryRoomSize>
            <CruisePriceSummaryRoomSize>
                <BestFare>
                    <TotalPrice>2796.000000</TotalPrice>
                </BestFare>
                <FullFare>
                    <TotalPrice>4196.000000</TotalPrice>
                </FullFare>
                <PaxCount>4</PaxCount>
            </CruisePriceSummaryRoomSize>
        </RoomSize>
        <ShipCode>PD</ShipCode>
    </CruisePriceSummaryResponse>
    <CruisePriceSummaryResponse>
        <AvailablePromos
            xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d3p1:string>FLA</d3p1:string>
            <d3p1:string>LF1</d3p1:string>
        </AvailablePromos>
        <Brand>PA</Brand>
        <RoomSize>
            <CruisePriceSummaryRoomSize>
                <BestFare>
                    <TotalPrice>1298.000000</TotalPrice>
                </BestFare>
                <FullFare>
                    <TotalPrice>3498.000000</TotalPrice>
                </FullFare>
                <PaxCount>2</PaxCount>
            </CruisePriceSummaryRoomSize>
            <CruisePriceSummaryRoomSize>
                <BestFare>
                    <TotalPrice>1796.000000</TotalPrice>
                </BestFare>
                <FullFare>
                    <TotalPrice>5396.000000</TotalPrice>
                </FullFare>
                <PaxCount>4</PaxCount>
            </CruisePriceSummaryRoomSize>
        </RoomSize>
        <ShipCode>PJ</ShipCode>
    </CruisePriceSummaryResponse>
</ArrayOfCruisePriceSummaryResponse>

PS I dont not want to use LINQ because I am working on a SSIS project using VS2008 and it does not support LINQ. PS我不想使用LINQ,因为我正在使用VS2008进行SSIS项目,并且它不支持LINQ。

You can use the various SelectNode variants to traverse your document and extract your data. 您可以使用各种SelectNode变体遍历文档并提取数据。

Try this: 尝试这个:

XmlNodeList xmlnodes;
xmlnodes = xml.GetElementsByTagName("CruisePriceSummaryResponse");

for (int i = 0; i < xmlnodes.Count; i++)
{
    XmlNodeList rooms = xmlnodes[i].SelectNodes("RoomSize/CruisePriceSummaryRoomSize");
    for(int j = 0; j < rooms.Count; j++)
    {
        string bestFare = rooms[j].SelectSingleNode("BestFare/TotalPrice").InnerText;
        string fullFare = rooms[j].SelectSingleNode("FullFare/TotalPrice").InnerText;

        // do whatever you need
    }
}

You might want to look here for information about XPath locations. 您可能需要在这里查找有关XPath位置的信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM