我目前正在循环一个 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