繁体   English   中英

为什么我在 .NET 中使用 XDocument 的代码不返回任何元素? (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 不返回任何元素。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM