繁体   English   中英

我如何过滤Linq结果以仅返回选择的XML列

[英]how can i filter the Linq results to only return selected XML column

只是想问一下如何过滤Linq结果以仅返回选择的XML列,根据我下面的XML,我只想仅返回EntityIdEntityNameYAReasonText

<TASubmittedFileDT>
  <SubmissionType>ECITESVW</SubmissionType>
  <EntityId>201413671M</EntityId>
  <EntityType>6</EntityType>
  <EntityName>Epic</EntityName>
  <YA>2018</YA>
  <FileName>2018.xml</FileName>
  <Reason>0</Reason>
  <ReasonText>Successful</ReasonText>
  <TotalECI>132961837365</TotalECI>
  <Revenue>3559940928276</Revenue>
</TASubmittedFileDT>

下面是我的代码:

XDocument doc = XDocument.Load(XMLFileFullName);

//code added by Reuel
//var TASubmittedFileDT = doc.Root.Elements("{http://tempuri.org/BatchDS.xsd}TASubmittedFileDT").ToList();
//XElement root = XElement.Load(XMLFileFullName);
IEnumerable<XElement> TASubmittedFileDT = from p in doc.Root.Elements() select p;
foreach (XElement e in TASubmittedFileDT)
  Console.WriteLine(e);

Console.WriteLine("GOT HERE!!!");
Console.ReadLine();

添加where子句以检查元素的名称:

HashSet<string> names = new HashSet<string>(new string[]
{
    "EntityId", "EntityName", "YA", "ReasonText"
});

var result = XDocument.Load("data.xml").Root.Descendants()
         .Where(element => names.Contains(element.Name.LocalName)).ToList();

或在查询语法中:

var result = from element in XDocument.Load("data.xml").Root.Descendants()
             where names.Contains(element.Name.LocalName)
             select element;

一个节点,如果您的xml包含几个TASubmittedFileDT元素,那么您将需要一些东西:

var result = XDocument.Load("data.xml").Descendants("TASubmittedFileDT")
                      .Select(element => element.Descendants()
                                                .Where(element => names.Contains(element.Name.LocalName)))
                      .ToList();

另一个可能的解决方案是将xml反序列化为自定义对象。

var serializer = new XmlSerializer(typeof(SomeModel), new XmlRootAttribute("TASubmittedFileDT"));
var doc = XDocument.Load("example.xml");
var resultingMessage = (SomeModel)serializer.Deserialize(doc.CreateReader());

public class SomeModel
{
    public string EntityId { get; set; }
    public string EntityName { get; set; }
    public int YA { get; set; }
    public string ReasonText { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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