gpt4 book ai didi

c# - 无法使用命名空间获取 XElement 后代元素值

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:59 25 4
gpt4 key购买 nike

在下面的代码中,我将 Id 的值设置为 null,即使它存在于 xml 片段中。在获得可迭代对象之后,看起来它需要更多的东西来获取值(value)。非常感谢任何帮助。

 var str =
@"
<CustomerCareReport xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.FireEms' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Edit</RecordAction>
<FireIncident xmlns:a='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.FireIncidents'>
<a:Address xmlns:b='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.Addresses'>
<b:City>SomeCity</b:City>
<b:HouseNumber>4019</b:HouseNumber>
<b:Id>1651880</b:Id>
<b:Lat>47.573911198</b:Lat>
<b:LocationType>Address</b:LocationType>
<b:Lon>-122.169529554</b:Lon>
<b:State xmlns:c='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.ValidationSets'>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Relate</RecordAction>
<c:Description>Washington</c:Description>
<c:EntryValue>WA</c:EntryValue>
<c:FilterString>WA Washington</c:FilterString>
<c:Id>85</c:Id>
<c:Inactive>false</c:Inactive>
<c:SetId>1021</c:SetId>
</b:State>
<b:StreetName>FACTORIA</b:StreetName>
<b:StreetSuffix>SE</b:StreetSuffix>
<b:StreetType>BLVD</b:StreetType>
<b:Venue>
<b:VenueName>BE</b:VenueName>
</b:Venue>
<b:VenueName>BE</b:VenueName>
<b:Zip>98006</b:Zip>
</a:Address>
<a:FDID xmlns:b='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.Jurisdictions'>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Relate</RecordAction>
<b:Ori>17M02</b:Ori>
</a:FDID>
<a:IncidentNumber>2016-00000071</a:IncidentNumber>
</FireIncident>
<OtherInformation>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Add</RecordAction>
<Documents xmlns:a='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.Documents'>
<a:Document>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Add</RecordAction>
<a:CheckOutMachine>TROPPLT</a:CheckOutMachine>
<a:Contents>Z2dn</a:Contents>
<a:Description>yoyo</a:Description>
<a:FileType xmlns:b='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.ValidationSets'>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Relate</RecordAction>
<b:Description>Notepad</b:Description>
<b:EntryValue>txt</b:EntryValue>
<b:FilterString>txt Notepad</b:FilterString>
<b:Id>1</b:Id>
<b:Inactive>false</b:Inactive>
<b:SetId>2574</b:SetId>
</a:FileType>
<a:Id>0e2821b0-9430-40a8-8964-443cdeeda018</a:Id>
<a:Name>yoyo</a:Name>
<a:UsageKey>0</a:UsageKey>
<a:UsageType>56</a:UsageType>
</a:Document>
<a:Document>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Add</RecordAction>
<a:CheckOutMachine>TROPPLTBKOLLURU</a:CheckOutMachine>
<a:Contents>ZmhmaA0KZmZmDQpmamZqZmpmDQo=</a:Contents>
<a:Description>test 2</a:Description>
<a:FileType xmlns:b='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.ValidationSets'>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Relate</RecordAction>
<b:Description>Notepad</b:Description>
<b:EntryValue>txt</b:EntryValue>
<b:FilterString>txt Notepad</b:FilterString>
<b:Id>1</b:Id>
<b:Inactive>false</b:Inactive>
<b:SetId>2574</b:SetId>
</a:FileType>
<a:Id>9b42f7e0-e0b3-4e83-a466-5862e9cb5bbe</a:Id>
<a:Name>test 2</a:Name>
<a:UsageKey>0</a:UsageKey>
<a:UsageType>56</a:UsageType>
</a:Document>
</Documents>
</OtherInformation>
<Response>
<Apparatus xmlns:a='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.Units'>
<RecordAction xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects'>Relate</RecordAction>
<a:Id>-1672</a:Id>
<a:UnitNumber>E1</a:UnitNumber>
</Apparatus>
<ResponseNumber>1600000071E1</ResponseNumber>
</Response>
<Time>
<CallDatetime>2016-07-01T12:26:34.277-04:00</CallDatetime>
<DispatchNotifiedDatetime>2016-07-01T12:26:34.277-04:00</DispatchNotifiedDatetime>
</Time>
</CustomerCareReport>
";

var xelement = XElement.Parse(str);
XNamespace ns = xelement.Name.Namespace;
var documents = xelement.Descendants(ns + "Documents");

foreach (XElement document in documents)
{
if (document.Name.LocalName.Equals("Id"))
{
Console.WriteLine(document.Value);

}

}

最佳答案

正如评论中所暗示的,Documents 的子元素中没有本地名称为 Id 的子元素。这是子 a:Document 元素的子元素。

使用正确的命名空间,您的查询应该如下所示:

XNamespace ns = "http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.FireEms"
XNamespace a = "http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.Documents"

var element = XElement.Parse(str);

var ids = element
.Descendants(ns + "Documents")
.Descendants(a + "Id");

参见 this fiddle用于工作演示。

关于c# - 无法使用命名空间获取 XElement 后代元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com