C# 检索子节点值
下面是我正在使用的XML LineItemDetails有多个实例,我只发布了其中一个C# 检索子节点值,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,下面是我正在使用的XML LineItemDetails有多个实例,我只发布了其中一个 <LineItemDetail> <DetailNumber>1</DetailNumber> <LineItemNumber>1</LineItemNumber> <BatchSequenceNumber>1</BatchSequenceNumber> <RecordSequenc
<LineItemDetail>
<DetailNumber>1</DetailNumber>
<LineItemNumber>1</LineItemNumber>
<BatchSequenceNumber>1</BatchSequenceNumber>
<RecordSequenceWithinBatch>1</RecordSequenceWithinBatch>
<ChargeAmount Name="GrossBilled">365.380</ChargeAmount>
<Tax>
<TaxType>Tax</TaxType>
<TaxAmount Name="Billed">15.630</TaxAmount>
<TaxBreakdown>
<TaxCode>MN</TaxCode>
<TaxAmount Name="Billed">15.630</TaxAmount>
</TaxBreakdown>
</Tax>
<AddOnCharges>
<AddOnChargeName>ISCAllowed</AddOnChargeName>
<AddOnChargePercentage>-9</AddOnChargePercentage>
<AddOnChargeAmount>-32.880</AddOnChargeAmount>
</AddOnCharges>
<TotalNetAmount>348.130</TotalNetAmount>
<CouponDetails>
<TicketOrFIMIssuingAirline>160</TicketOrFIMIssuingAirline>
<TicketOrFIMCouponNumber>1</TicketOrFIMCouponNumber>
<TicketDocOrFIMNumber>2649488544</TicketDocOrFIMNumber>
<CheckDigit>6</CheckDigit>
<CurrAdjustmentIndicator>USD</CurrAdjustmentIndicator>
<ElectronicTicketIndicator>E</ElectronicTicketIndicator>
<AirlineFlightDesignator>MR</AirlineFlightDesignator>
<FlightNo>885</FlightNo>
<FlightDate>2013-04-03</FlightDate>
<FromAirportCode>ULN</FromAirportCode>
<ToAirportCode>HKG</ToAirportCode>
<SettlementAuthorizationCode>861FBKOPVEZZ4</SettlementAuthorizationCode>
<Attachment>
<AttachmentIndicatorOriginal>N</AttachmentIndicatorOriginal>
</Attachment>
</CouponDetails>
</LineItemDetail>
p、 ElementTaxCOde只检查p元素的直接子元素,所以它什么也找不到
试试看:
foreach (var p in tax)
{
taxcode= (string)p.Element("TaxBreakdown").Element("TaxCode");
}
我使用了stringXElement转换而不是XElement.Value属性,因为当找不到元素时,它不会抛出NullReferenceException
编辑
示例XML的测试代码:
var doc = XDocument.Load("source.txt");
var lineItemDetails = doc.Descendants("LineItemDetail");
foreach (var lineItemDetail in lineItemDetails)
{
var tax = lineItemDetail.Element("Tax");
var taxCode = (string)tax.Element("TaxBreakdown").Element("TaxCode");
}
税码是MN。试试这个
foreach (var p in tax)
{
taxcode= p.Element("TaxBreakdown").Element("TaxCode").Value;
}
为什么不尝试使用XmlDocument呢?在文档中加载xml后,您可以这样做,我已将XmlDocument声明为doc:
我写这篇文章只是用我的记忆,所以如果我犯了一些语法或语法错误,我很抱歉可能是打字错误:TaxCOde?XML中有任何名称空间吗?下面的答案应该是有效的-如果你仍然得到空值,那么我打赌这是一个命名空间问题。仍然不起作用,现在我得到这个错误-对象引用没有设置为对象的实例。当我试着this@user2660107您发布的XML是整个文档还是真实文档的一部分?每个元素的结构是否都与您发布的相同?请参阅原始代码中的更新我发布了LineItemDetail的一个实例。仍然没有结果Ajay。。。。我在doc.Root.genderantstax select t中做了这个var tax=from t;税收{taxcode=p.ElementTaxBreakdown.ElementTaxCode.Value;}我发现以下错误:System.Xml.Linq.XDocument不包含“GetElementsByTagName”的定义,并且找不到接受“System.Xml.Linq.XDocument”类型的第一个参数的扩展方法“GetElementsByTagName”。是否缺少using指令或程序集引用?它不是XDocument,而是XmlDocument,您必须使用添加。将System.Xml放在代码顶部;真正地哇!我的代码在这里工作。。。。在我告诉您的引用中看到名称空间Linq很奇怪。你完成所有这些步骤了吗?1-XmlDocument doc=新的XmlDocument 2-doc.LoadpathtoYourDocument 3-doc.getElementsByTagname?这应该管用!!不确定这是如何回答的,因为它返回TaxType,并且代码OP posted正在查找TaxCode….?thnx kanith。。。。。只是它应该是。。。。。Tax=来自DocumentObject.DegenantStatxBreakDown中的TaxInfo选择TaxInfo;
XDocument DocumentObject = XDocument.Load(yourxml);
IEnumerable<XElement> Tax= from TaxInfo in DocumentObject.Descendants("Tax") select TaxInfo;
foreach (var t in Tax)
{
TaxType = (string)t.Element("TaxType");
}
foreach(XmlElement elem in doc.GetElementsByTagName("TaxCOde"))
taxcode = elem.InnerText;
XDocument DocumentObject = XDocument.Load(yourxml);
IEnumerable<XElement> Tax= from TaxInfo in DocumentObject.Descendants("Tax") select TaxInfo;
foreach (var t in Tax)
{
TaxType = (string)t.Element("TaxType");
}