[英]Why my code with XDocument in .NET not return any elements? (Problem with XML and XDocument)
我对以下 XML 有疑问:
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ReportName="SearchQueryPerformanceReport_05_24_2022_11_19_51" ReportTime="3/24/2022,5/23/2022" TimeZone="Various" ReportAggregation="Daily" LastCompletedAvailableDay="5/24/2022 10:20:00 AM (GMT)" LastCompletedAvailableHour="5/24/2022 10:20:00 AM (GMT)" PotentialIncompleteData="true" xmlns="http://adcenter.microsoft.com/advertiser/reporting/v5/XMLSchema">
<Table>
<Row>
<AccountName value="fffffff" />
<CampaignName value="dddddddddddddd" />
<CampaignId value="424769594" />
<Clicks value="1" />
<CostPerConversion value="" />
<Ctr value="100.00%" />
<AccountId value="1848" />
<DeviceType value="Computer" />
<AverageCpc value="0.25" />
<AveragePosition value="0.00" />
<BidMatchType value="Exact" />
<AdGroupName value="eeeeeeeeee" />
<AdGroupId value="135899347066" />
<AdId value="84933705" />
<ConversionRate value="0.00%" />
<Keyword value="zusammen at" />
<KeywordId value="84937818" />
<Language value="German" />
<Conversions value="0" />
<Impressions value="1" />
<Spend value="0.25" />
<TimePeriod value="2022-04-13" />
<SearchQuery value="zusammen.at" />
</Row>
</Table>
<Copyright>©2022 Microsoft Corporation. All rights reserved. </Copyright>
</Report>
当我使用此代码时,XML 不返回任何元素。
XDocument doc = XDocument.Parse(LstSearchTermV.XmlContent); var result2 = from s in doc.Descendants("Table");
或者
var result2 = from s in doc.Element("Table");
或者
var result2 = from s in doc.Elements("Row");
我尝试了不同的方法,但没有。
我用其他 XML 测试并且有同样的问题。
有谁知道为什么,问题出在哪里?
更新:我试试看: XDocument 元素返回 null
它工作,我得到元素但是,当我尝试获取值时,代码很长,例如: var ValueElement = el.Element(XName.Get("CampaignId", doc.Root.GetDefaultNamespace().NamespaceName)).Attributes().Where(w => w.Name == "value");
¿ 是否有任何代码更短或更优化以获取 XDocument 的数据?
是的,您绝对可以编写比这更简单的代码,使用XNamespace
类型以及可用于创建XName
的各种运算符和转换,并使用查找具有给定名称的属性的Attribute
方法:
// Or XNamespace ns = doc.Root.GetDefaultNamespace()
XNamespace ns = "http://adcenter.microsoft.com/advertiser/reporting/v5/XMLSchema";
var value = el.Element(ns + "CampaignId").Attribute("value");
如果没有这样的属性,则value
将为 null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.