在保留文件结构的同时解析XML文件中的所有内容(C#)

时间:2017-06-25 20:55:15

标签: c# xml

这应该是一个简单的

假设我有以下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文件,并返回执行以下操作的文本文件。

1。删除尽可能多的XML格式(标签,命名空间等)

2。保留缩进的文件结构

因此,这个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),但我不确定它们的优点/缺点是什么。

0 个答案:

没有答案