【问题标题】:SelectNodes return null [duplicate]SelectNodes返回null [重复]
【发布时间】:2015-10-14 22:52:33
【问题描述】:

我正在使用 SelectNodes 读取 xml 节点,但是当我尝试 GetElementsByTagName 时,我得到了 null 值。

XmlDocument xml = new XmlDocument();
xml.Load(DownloadFile);
XmlNodeList xmlnode;
xmlnode = xml.GetElementsByTagName("CruisePriceSummaryResponse");

for (int i = 0; i < xmlnode.Count; i++)
{
    XmlNodeList rooms = xml .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
    }
}

我想从BestFareFullFare 中读取TotalPrice 每个孩子都有两个内在孩子BestFareFullFareand 我需要读取每个TotalPrice

这是我的 XML

<?xml version="1.0" encoding="utf-8"?>
<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>

我们将不胜感激。我不想使用 linq,因为这是一个使用 VS2008 的 SSIS 项目,它不支持 linq。

提前致谢

【问题讨论】:

    标签: c# .net xml xml-parsing selectnodes


    【解决方案1】:

    您永远不会加载或读取源 XML。你的代码

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

    创建一个空的 XML 文档,然后尝试从空的 xml 中获取元素。

    您需要调用XmlDocument.LoadXmlDocument.LoadXML 从文件或字符串中读取xml。

    XmlDocument xml = new XmlDocument();
    xml.Load("pathtosomefile.xml");
    XmlNodeList xmlnode = xml.GetElementsByTagName("CruisePriceSummaryResponse");
    

    【讨论】:

    • 谢谢,我忘记在发布的问题中添加这一行,我可以看到 xmlnode 中的值,但 selectnodes 是这里的问题,它正在重新调整 null。 P.S 我已经更新了我的问题并添加了缺少的 xml.load 行。
    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 2019-10-04
    • 2011-11-01
    • 2017-05-09
    • 2012-02-01
    • 2015-09-11
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多