C# 如何过滤Linq结果以仅返回选定的XML列
我只想问一下如何过滤Linq结果以仅返回选定的XML列,根据下面的XML,我只想返回C# 如何过滤Linq结果以仅返回选定的XML列,c#,linq,linq-to-xml,C#,Linq,Linq To Xml,我只想问一下如何过滤Linq结果以仅返回选定的XML列,根据下面的XML,我只想返回EntityId,EntityName,YA,ReasonText的值 <TASubmittedFileDT> <SubmissionType>ECITESVW</SubmissionType> <EntityId>201413671M</EntityId> <EntityType>6</EntityType> &
EntityId
,EntityName
,YA
,ReasonText
的值
<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>
ECITESVW
201413671M
6.
史诗
2018
2018.xml
0
成功的
132961837365
3559940928276
下面是我的代码:
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();
XDocument doc=XDocument.Load(XMLFileFullName);
//代码由Reuel添加
//var tasubmittedfledt=doc.Root.Elements(“{http://tempuri.org/BatchDS.xsd}tasubmittedfled”).ToList();
//XElement root=XElement.Load(XMLFileFullName);
IEnumerable tasubmittedfledt=从doc.Root.Elements()中的p选择p;
foreach(塔苏布米特德菲尔德的XElement e)
控制台写入线(e);
Console.WriteLine(“到达这里!!!”;
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();
节点,如果您的xml包含多个
tasubmittedfled
元素,那么您需要一些东西:
另一种可能的解决方案是将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; }
}
嗨,吉拉德,谢谢你的回复和代码输入。此时,它正在输出正确的XML节点数据。只是一个问题,为什么输出包含此信息“(xmlns=“)”。这是输出datatempuri.org/BatchDS.xsd“>201413671M。位于“我的XML”顶部的信息。@kruel08-那么您正在测试的不是所讨论的确切XML。我不这样理解。@Gilad,很抱歉搞混了。这是XML的顶部部分,我无法将其包含在我的帖子中。91350111 201003116E 6我没想到它会在xml的第一部分包含一些文本。@kruel08-这是应该添加到问题正文中而不是注释中的内容。然而,这是一个后续问题,应在单独的问题中提出。我的建议是,你应该读入名称空间学院。感谢您的帮助,我们将阅读有关名称空间的内容。
var result = XDocument.Load("data.xml").Descendants("TASubmittedFileDT")
.Select(element => element.Descendants()
.Where(element => names.Contains(element.Name.LocalName)))
.ToList();
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; }
}