我正在循环遍历XML文档。结构如下所示(数据已更改)
<activity date="2013-07-05T06:42:37" name="view" host="00.000.00.000">
<user id="EU-user@user.co.uk" name="U user" memberType="E" />
<storageObject docId="0000-0000-0000" name="2. Extract Lease - 31.07.2003" size="1903885" fileExtension="pdf">
<cabinet name="Company Intranet">NG-FGW7XX1Y</cabinet>
<Matter>0000</Matter>
<Client>X01659</Client>
<Author>Joe Bloggs</Author>
</storageObject>
</activity>
我需要做的是遍历每个activity
元素,并打印每个子元素和属性中保存的信息。目前我有这个
var root = doc.Root;
foreach (XElement el in root.Elements().DescendantsAndSelf())
{
if (el.Value.Equals(""))
{
//don't print anything, just move along, nothing to see here
}
else
{
Console.WriteLine(el.Value);
}
//Console.WriteLine(" Attributes:");
if (el.HasAttributes == true)
{
foreach (XAttribute attr in el.Attributes())
{
Console.WriteLine(attr.ToString());
// Console.WriteLine(el.Elements("id"));
}
}
}
这在某种程度上起作用,除了activity
元素的结束没有明显的区别(即,一旦完成就打印出一面文本墙,我希望能够区分元素之间)。它还会在整个过程中两次打印cabinet
元素,但作为子元素的连接版本,在循环之前单独打印出来。如下图所示
NG-FGW7XX1Y0000X01659Joe Bloggs
date="2013-07-05T06:42:37"
name="view"
host="00.000.00.000"
id="EU-user@user.co.uk"
name="U user"
memberType="E"
NG-FGW7XX1Y0000X01659Joe Bloggs
docId="0000-0000-0000"
name="2. Extract Lease - 31.07.2003"
size="1903885"
fileExtension="pdf"
NG-FGW7XX1Y
name="Company Intranet"
0000
X01659
Joe Bloggs
我需要能够循环遍历单个activity
元素,并打印出所有元素和属性,而不使用连接的行。我还希望能够插入Console.WriteLine("------");
,以便我可以在控制台上轻松查看每个活动的结束位置。有什么建议吗?
我循环使用元素的原因是某些记录有其他元素,否则将无法找到。
编辑:这应该是它的样子
date="2013-07-05T06:42:37"
name="view"
host="00.000.00.000"
id="EU-user@user.co.uk"
name="U user"
memberType="E"
docId="0000-0000-0000"
name="2. Extract Lease - 31.07.2003"
size="1903885"
fileExtension="pdf"
NG-FGW7XX1Y
name="Company Intranet"
0000
X01659
Joe Bloggs