[英]xml namespace get xml element value
i have xml like 我有像XML
<?xml version="1.0" encoding="UTF-8"?>
<GetBooking Nmbr="0015151001" Identifier="1771C9A911E98" Version="2006.01" Token="11868765">
<Reservation xmlns="http://www.facebook.org/someurl">
<Extensions>
<ns2:ReservationExt xmlns="http://www.facebook.org/someurl xmlns:ns2="http://www.google.com/india">
<ns2:ExtPayTxInfo>
<ns2:ReferenceID>35775726</ns2:ReferenceID>
<ns2:QueryRPH>35775726NI10054145950</ns2:QueryRPH>
<ns2:Status>1</ns2:Status>
<ns2:Amount>17.85</ns2:Amount>
<ns2:Code>9</ns2:Code>
<ns2:TxStatus>1</ns2:TxStatus>
<ns2:Timestamp>2014-09-10T05:41:45</ns2:Timestamp>
<ns2:EndTimestamp>2014-09-10T05:41:45</ns2:EndTimestamp>
</ns2:ExtPayTxInfo>
</ns2:ReservationExt>
</Extensions>
</Reservation>
<Success xmlns="http://www.facebook.org/someurl" />
</GetBooking>
I want to have <ns2:Amount>
tag value 我想拥有
<ns2:Amount>
标记值
string xml = "";// XML Pasted Above
XNamespace ns1 = "http://www.facebook.org/someurl";
XNamespace ns2 = "http://www.google.com/india";
var elem = XElement.Parse(xml);
var value = elem.Element(ns2 + "Amount").Value;
It gives me error object reference not set to an instance 它给我未设置实例的错误对象引用
The problem is that the ns2 + "Amount"
element cannot be found. 问题是找不到
ns2 + "Amount"
元素。 Therefore, it returns null
and you cannot access the Value
property of a null
object. 因此,它返回
null
并且您不能访问null
对象的Value
属性。 Since you load the entire XML inside your elem
object, it will "represent" the whole XML, ie starting from the GetBooking
element. 由于您将整个XML加载到
elem
对象中,因此它将“表示”整个XML,即从GetBooking
元素开始。 This element does not have a direct child called Amount
, therefore asking it to return that element will result in a null
object. 该元素没有直接子元素
Amount
,因此,要求它返回该元素将导致一个null
对象。 Using the Descendants
method, the element is searched in the entire sub-tree of the XML and not on the first level. 使用
Descendants
方法,可以在XML的整个子树中而不是在第一级上搜索元素。
var targets = elem.Descendants(ns2 + "Amount").ToList();
var value = "";
if (targets.Count > 0)
value = targets[0].Value;
Just mentioning that correct xml should look something like: 只是提到正确的xml应该看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<GetBooking Nmbr="0015151001" Identifier="1771C9A911E98" Version="2006.01" Token="11868765" xmlns:f="http://www.w3.org/TR/html4/" xmlns:ns2="http://www.google.com/india">
<f:Reservation>
<f:Extensions>
<ns2:ReservationExt >
<ns2:ExtPayTxInfo>
<ns2:ReferenceID>35775726</ns2:ReferenceID>
<ns2:QueryRPH>35775726NI10054145950</ns2:QueryRPH>
<ns2:Status>1</ns2:Status>
<ns2:Amount>17.85</ns2:Amount>
<ns2:Code>9</ns2:Code>
<ns2:TxStatus>1</ns2:TxStatus>
<ns2:Timestamp>2014-09-10T05:41:45</ns2:Timestamp>
<ns2:EndTimestamp>2014-09-10T05:41:45</ns2:EndTimestamp>
</ns2:ExtPayTxInfo>
</ns2:ReservationExt>
</f:Extensions>
</f:Reservation>
<f:Success/>
</GetBooking>
This should result in Poco 这应该导致Poco
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class GetBooking
{
[System.Xml.Serialization.XmlElementAttribute(Namespace = "http://www.w3.org/TR/html4/")]
public Reservation Reservation { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Namespace = "http://www.w3.org/TR/html4/")]
public object Success { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public uint Nmbr { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Identifier { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal Version { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public uint Token { get; set; }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/TR/html4/")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.w3.org/TR/html4/", IsNullable = false)]
public partial class Reservation
{
public ReservationExtensions Extensions { get; set; }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/TR/html4/")]
public partial class ReservationExtensions
{
[System.Xml.Serialization.XmlElementAttribute(Namespace = "http://www.google.com/india")]
public ReservationExt ReservationExt { get; set; }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.google.com/india")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.google.com/india", IsNullable = false)]
public partial class ReservationExt
{
public ReservationExtExtPayTxInfo ExtPayTxInfo { get; set; }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.google.com/india")]
public partial class ReservationExtExtPayTxInfo
{
public uint ReferenceID { get; set; }
public string QueryRPH { get; set; }
public byte Status { get; set; }
public decimal Amount { get; set; }
public byte Code { get; set; }
public byte TxStatus { get; set; }
public DateTime Timestamp { get; set; }
public DateTime EndTimestamp { get; set; }
}
In that case 在这种情况下
GetBooking booking;
if (xmlstring.Deserialize(out booking))
{
decimal value = booking.Reservation.Extensions.ReservationExt.ExtPayTxInfo.Amount;
//do something with the value
}
ref : deserialize ref: 反序列化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.