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可能是可以接受的,也可能是不可以接受的。