Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从XML格式的字符串中读取任何节点元素的值?_C#_Xml_Linq_Web Services - Fatal编程技术网

C# 如何从XML格式的字符串中读取任何节点元素的值?

C# 如何从XML格式的字符串中读取任何节点元素的值?,c#,xml,linq,web-services,C#,Xml,Linq,Web Services,我在string\uuu MessageIn变量中有以下XML格式化字符串: string _MessageIn= <?Label TSRAY|RESERVATION|317859|SUCCESS?> <Reservation xmlns="reservation.fidelio.2.0" mfShareAction="NA" mfReservationAction="EDIT"> <HotelReference>

我在
string\uuu MessageIn
变量中有以下
XML
格式化字符串:

string _MessageIn=
    <?Label TSRAY|RESERVATION|317859|SUCCESS?>
    <Reservation xmlns="reservation.fidelio.2.0" mfShareAction="NA" mfReservationAction="EDIT">
      <HotelReference>
        <hotelCode>TSRAY</hotelCode>
      </HotelReference>
      <confirmationID>Y6Z7TFJDK</confirmationID>
      <reservationID>347557</reservationID>
      <reservationOriginatorCode>JA</reservationOriginatorCode>
      <originalBookingDate>2010-08-16T22:53:23.000</originalBookingDate>
      <StayDateRange timeUnitType="DAY">
        <startTime>2010-08-19T00:00:00.000</startTime>
        <numberOfTimeUnits>3</numberOfTimeUnits>
      </StayDateRange>
      <GuestCounts>
        <GuestCount>
          <ageQualifyingCode>ADULT</ageQualifyingCode>
          <mfCount>2</mfCount>
        </GuestCount>
        <GuestCount>
          <ageQualifyingCode>CHILD</ageQualifyingCode>
          <mfCount>0</mfCount>
        </GuestCount>
      </GuestCounts>
      ...................
     ..................
    </Reservation>
如何从上面的
XML
格式化
字符串变量
中获取所需的值

提前谢谢

试试这个

 string _MessageIn="<?Label TSRAY|RESERVATION|317859|SUCCESS?>    <Reservation xmlns='reservation.fidelio.2.0' mfShareAction='NA' mfReservationAction='EDIT'>      <HotelReference>        <hotelCode>TSRAY</hotelCode>      </HotelReference>     <confirmationID>Y6Z7TFJDK</confirmationID>      <reservationID>347557</reservationID>      <reservationOriginatorCode>JA</reservationOriginatorCode>      <originalBookingDate>2010-08-16T22:53:23.000</originalBookingDate>      <StayDateRange timeUnitType='DAY'>        <startTime>2010-08-19T00:00:00.000</startTime>        <numberOfTimeUnits>3</numberOfTimeUnits>      </StayDateRange>      <GuestCounts>        <GuestCount>          <ageQualifyingCode>ADULT</ageQualifyingCode>          <mfCount>2</mfCount>        </GuestCount>        <GuestCount>          <ageQualifyingCode>CHILD</ageQualifyingCode>          <mfCount>0</mfCount>        </GuestCount>      </GuestCounts>      ...................   ..................    </Reservation>";    
                string HotelCode = ""; // you can create HotelCode-Array to store all Hotelcodes
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(_MessageIn);
                XmlNodeList list=doc.GetElementsByTagName("hotelCode");
                foreach (XmlNode node in list)
                {
                    if (node.Name == "hotelCode")
                    {
                        HotelCode=node.InnerText;
                    }
                }
string_MessageIn=“TSRAY Y6Z7TFJDK 347557 JA 2010-08-16T22:53:23.000 2010-08-19T00:00:00.000 3成人2儿童0……”;
字符串HotelCode=“”;//您可以创建HotelCode数组来存储所有Hotelcodes
XmlDocument doc=新的XmlDocument();
doc.LoadXml(_MessageIn);
XmlNodeList=doc.GetElementsByTagName(“hotelCode”);
foreach(列表中的XmlNode节点)
{
如果(node.Name==“hotelCode”)
{
HotelCode=node.InnerText;
}
}
试试这个

 string _MessageIn="<?Label TSRAY|RESERVATION|317859|SUCCESS?>    <Reservation xmlns='reservation.fidelio.2.0' mfShareAction='NA' mfReservationAction='EDIT'>      <HotelReference>        <hotelCode>TSRAY</hotelCode>      </HotelReference>     <confirmationID>Y6Z7TFJDK</confirmationID>      <reservationID>347557</reservationID>      <reservationOriginatorCode>JA</reservationOriginatorCode>      <originalBookingDate>2010-08-16T22:53:23.000</originalBookingDate>      <StayDateRange timeUnitType='DAY'>        <startTime>2010-08-19T00:00:00.000</startTime>        <numberOfTimeUnits>3</numberOfTimeUnits>      </StayDateRange>      <GuestCounts>        <GuestCount>          <ageQualifyingCode>ADULT</ageQualifyingCode>          <mfCount>2</mfCount>        </GuestCount>        <GuestCount>          <ageQualifyingCode>CHILD</ageQualifyingCode>          <mfCount>0</mfCount>        </GuestCount>      </GuestCounts>      ...................   ..................    </Reservation>";    
                string HotelCode = ""; // you can create HotelCode-Array to store all Hotelcodes
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(_MessageIn);
                XmlNodeList list=doc.GetElementsByTagName("hotelCode");
                foreach (XmlNode node in list)
                {
                    if (node.Name == "hotelCode")
                    {
                        HotelCode=node.InnerText;
                    }
                }
string_MessageIn=“TSRAY Y6Z7TFJDK 347557 JA 2010-08-16T22:53:23.000 2010-08-19T00:00:00.000 3成人2儿童0……”;
字符串HotelCode=“”;//您可以创建HotelCode数组来存储所有Hotelcodes
XmlDocument doc=新的XmlDocument();
doc.LoadXml(_MessageIn);
XmlNodeList=doc.GetElementsByTagName(“hotelCode”);
foreach(列表中的XmlNode节点)
{
如果(node.Name==“hotelCode”)
{
HotelCode=node.InnerText;
}
}

发生这种情况是因为名称空间是xml的一部分

有两种方法可以解决这个问题,或者删除名称空间“reservation.fidelio.2.0”,那么代码就可以正常工作。但这可能不可行

因此,在执行搜索时,我们必须将名称空间与节点名称一起传递。。尝试以下方法,这将解决您的问题。希望这有帮助

        string ns = "reservation.fidelio.2.0";
        string node = "HotelReference";
        string elem = "hotelCode";
        XName xn = XName.Get(node, ns);
        XName xe = XName.Get(elem, ns);
        var HotelReference = doc.Root.Descendants(xn).Select(x => new { HotelCode = x.Element(xe).Value }).FirstOrDefault();

这是因为名称空间是xml的一部分

有两种方法可以解决这个问题,或者删除名称空间“reservation.fidelio.2.0”,那么代码就可以正常工作。但这可能不可行

因此,在执行搜索时,我们必须将名称空间与节点名称一起传递。。尝试以下方法,这将解决您的问题。希望这有帮助

        string ns = "reservation.fidelio.2.0";
        string node = "HotelReference";
        string elem = "hotelCode";
        XName xn = XName.Get(node, ns);
        XName xe = XName.Get(elem, ns);
        var HotelReference = doc.Root.Descendants(xn).Select(x => new { HotelCode = x.Element(xe).Value }).FirstOrDefault();

这样避开名称空间只适用于小型和受限的情况。使用旧的XmlDocument可能是可以接受的,也可能是不可以接受的。像这样避开名称空间只适用于小型和受限的情况。使用旧的XmlDocument可能是可以接受的,也可能是不可以接受的。