为什么我在 .NET 中使用 XDocument 的代码没有 return 任何元素? (XML 和 XDocument 的问题)

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 不会 return 任何元素。

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 Elements return 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。