这应该是一个简单的
假设我有以下XML文件结构
<my:statusReport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003">
<my:reportDate/>
<my:projectName/>
<my:preparedBy/>
<my:emailAddress/>
<my:managerName/>
<my:departmentName/>
<my:summary/>
<my:individualStatusItems>
<my:individualStatusItem>
<my:teamMemberName/>
<my:teamMemberStatus/>
</my:individualStatusItem>
</my:individualStatusItems>
<my:workItems>
<my:workItem>
<my:workItemName/>
<my:workItemOwner/>
<my:workItemDueDate/>
<my:workItemStatus>0.00</my:workItemStatus>
</my:workItem>
</my:workItems>
<my:openIssues>
<my:openIssue>
<my:issueName/>
<my:issueOwner/>
<my:issueDetails/>
</my:openIssue>
</my:openIssues>
<my:notes>
<my:notesDetails/>
</my:notes>
<my:signatureSection/>
<my:signatures1>
<my:signatures2/>
</my:signatures1>
<xd:SchemaInfo LocalName="statusReport" NamespaceURI="http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56">
<xd:Namespaces>
<xd:Namespace LocalName="statusReport" NamespaceURI="http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56"/>
</xd:Namespaces>
</xd:SchemaInfo>
我想解析整个XML文件,并返回执行以下操作的文本文件。
因此,这个xml文本文件将返回一个看起来像这样的文本文件
reportDate
projectName
preparedBy
emailAddress
managerName
Summary
individualStatusItems
myindividualStatusItems
teamMemberName
teamMemberStatus
workItems
workItem
WorkItemName
WorkItemOwner
这个最好的工具是什么?
我的实现基于此代码
XmlReader xReader = XmlReader.Create(new StringReader(xmlNode));
while (xReader.Read())
{
switch (xReader.NodeType)
{
case XmlNodeType.Element:
listBox1.Items.Add("<" + xReader.Name + ">");
break;
case XmlNodeType.Text:
listBox1.Items.Add(xReader.Value);
break;
case XmlNodeType.EndElement:
listBox1.Items.Add("");
break;
}
}
但是我无法通过嵌套结构很好地使用它,它似乎只适用于嵌套一层深度的字段。它也没有做任何命名空间管理,我引入了一个“hacky”解析器,它在开始时找到命名空间,然后自己从字段中解析出来。
我已经阅读了很多不同的方法(XMLDoc,LINQ,XLSN),但我不确定它们的优点/缺点是什么。