【发布时间】:2020-10-06 14:04:42
【问题描述】:
我有下面的方法和下面的xml文件。 该方法过滤所有“Tag4”元素的内容并将其插入到列表中。 不幸的是,我遇到的问题是,对于几个子元素,该方法不再有效。 然后只有内容:“Content1”被添加到列表中,其余的被忽略。
方法:
public List<string> Method(string sourcePath)
{
string directory = sourcePath;
var resultList = new List<string>();
try
{
XDocument xdocument = XDocument.Load(directory);
IEnumerable<XElement> tags = xdocument.Root.Elements().Elements().Where(x => x.Name.LocalName.Equals("Tag4"));
foreach (var tag in tags)
{
var value = tag?.Value;
if (!string.IsNullOrEmpty(value) && !resultList.Contains(value))
{
resultList.Add(value);
}
}
}
catch (Exception ex)
{
}
return resultList;
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<Tag1Group xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsinc="http://www.w3.org/2001/XInclude" validFrom="2020-03-26T00:00:00+01:00" version="4" subversion="22" xmlns="http://www.bmw.com/ista/v2">
<Tag1 name="Content1" version="4" Subversion="22">
<Tag2>
<Tag1 name="Content2" version="4" subversion="22">
<Tag2>
<Tag1 name="Content3" version="4" subversion="22">
<Tag2>
<Tag1 name="Content4" version="4" subversion="22">
<Tag3>Ex</Tag3>
<Tag4>Content4</Tag4>
<Tag5>123</Tag5>
</Tag1>
</Tag2>
<Tag3>Ex</Tag3>
<Tag4>Content3</Tag4>
<Tag5>456</Tag5>
</Tag1>
</Tag2>
<Tag3>Ex</Tag3>
<Tag4>Content2</Tag4>
<Tag5>789</Tag5>
</Tag1>
</Tag2>
<Tag3>Ex</Tag3>
<Tag4>Content1</Tag4>
<Tag5>1011</Tag5>
</Tag1>
</Tag1Group>
如何更改方法以从 tag4 中获取所有元素,而不管它们的级别如何。 所以我的意思也是:“Content2”、“Content3”、“Content4”
【问题讨论】: