我坚持访问子节点值。下面是用于创建新联系人的 XML 结构和代码。
<Order xmlns="http://example.com">
<MiscContact>
<MiscContact>
<ContactType>MailingContact</ContactType>
<Contact>
<Name>
<First>JIM</First>
<Last>RON</Last>
<FullName>RON JIM</FullName>
</Name>
<IsValid>false</IsValid>
</Contact>
</MiscContact>
</MiscContact>
<ExportForm>
<Contact>
<Name>
<First>JIM</First>
<Last>RON</Last>
<FullName>RON JIM</FullName>
</Name>
<IsValid>false</IsValid>
</Contact>
</ExportForm>
</Order>
仅为<MiscContact>
创建新联系人的代码:
XNamespace Namespace = "http://online.us.com";
var MiscContact = from mc in xmlDoc.Descendants(Namespace + "Contact")
where mc.Parent.Name.Equals("MiscContact")
select new Contact
{ Name = ob.Element(Namespace + "Name").Value }
我遇到的问题是,即使我有 where 子句只选择父级是 MiscContact 的联系人,但来自 <MiscContact>
和<ExportForm>
的联系部分都被加载了。
知道如何解决这个问题吗?
您的代码似乎与 where
子句正常工作,并从 MiscContact -> Contact -> Name
中提取 Name
元素。我认为您的问题是您最终使用了.Value
,它将所有这些值连接在一起:
<Name>
<First>JIM</First>
<Last>RON</Last>
<FullName>RON JIM</FullName>
</Name>
结果是"JIMRONRON JIM"。如果您需要"FullName"
那么您应该使用:
mc.Element(Namespace + "Name")
.Element(Namespace + "FullName").Value
根据需要将"FullName"
替换为"First"
或"Last"
。