使用 LINQ to XML 访问具有父引用的子节点值



我坚持访问子节点值。下面是用于创建新联系人的 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"

相关内容

  • 没有找到相关文章

最新更新