2015-12-18 33 views
0

我有一个需要建立一个字符串,通过将html内容作为xml并显示为下面的输出,我可以实现下面的输出,但不同层次上的间距丢失。有人请帮我搞清楚上述问题使用C#的XML操作

输入

<xml> 
    <Test1> 
    <Test1-Sub1> 
     Testing 1 sub 1 
    </Test1-Sub1> 
    <Test1-Sub2> 
     <Test1-Sub2-SubPart1> 
     Testing Sub2-SubPart1 
     </Test1-Sub2-SubPart1> 

    </Test1-Sub2> 
    </Test1> 
    <Test2> 
    <Test2-Sub1> 
     <Test2-Sub1-SubPart1> 
     Testing Sub1-SubPart1 
     </Test2-Sub1-SubPart1> 
    </Test2-Sub1> 
    </test2> 
</xml> 

输出

xml 
    test1 
    test1-sub1 
     | Testing 1 sub 1 
    test1-sub2 
     test1-sub2-subpart1 
     | Testing Sub2-SubPart1 
    test2 
    test2-sub1 
     test2-sub1-subpart1 
     | Testing Sub1-SubPart1 

通用的解决方案是非常有帮助..

+4

显示你的代码。互联网上的随机人员不太可能会为您编写程序,但如果您共享的代码示例很少但完整,则可能会帮助您修复一个错误。 – adv12

+0

如果你是递归解析xml看看下面的网站:http://stackoverflow.com/questions/28976601/recursion-parsing-xml-file-with-attributes-into-treeview-c-sharp – jdweng

+0

@jdweng谢谢你的回复我已经实现了树形视图,但是假如在预期的o/p – user5696437

回答

1

下面的类会帮助你做你的东西。

class XmlHierarchicalTextBuilder 
{ 
    private XmlDocument xmlDoc; 
    private string hierarchicalText; 
    private int indentlevel = 0; 

    private const string NEW_LINE = "\n"; 
    private const string TAB = "\t"; 
    private const string PIPE = "|"; 
    private const string SPACE = " "; 

    public XmlHierarchicalTextBuilder (string xml) 
    { 
     xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xml); 
    } 

    public string Build() 
    { 
     Build(xmlDoc.DocumentElement); 
     return hierarchicalText; 
    } 

    private void Build(XmlElement xmlElement) 
    {    
     if (xmlElement.HasChildNodes) 
     { 
      HandleXmlElementName(xmlElement); 

      foreach (XmlNode item in xmlElement.ChildNodes) 
      { 
       indentlevel++; 

       if (item.NodeType == XmlNodeType.Text) 
       { 
        HandleXmlElementInnerText(xmlElement);      
       } 
       else if (item.NodeType == XmlNodeType.Element) 
       { 
        Build((XmlElement)item); 
       } 
       //add more conditions based on different xml node types in future, if u want 

       indentlevel--; 
      } 

     }   
    } 

    private void HandleXmlElementInnerText(XmlElement xmlElement) 
    { 
     addIndent(); 
     hierarchicalText += PIPE + SPACE + xmlElement.InnerText.Trim(); 
     addNewLine(); 
    } 

    private void HandleXmlElementName(XmlElement xmlElement) 
    { 
     addIndent(); 
     hierarchicalText += xmlElement.Name; 
     addNewLine(); 
    } 

    private void addIndent() 
    { 
     for (int i = 0; i < indentlevel; i++) 
     { 
      hierarchicalText += TAB; 
     } 
    } 

    private void addNewLine() 
    { 
     hierarchicalText += NEW_LINE; 
    } 
} 

将您的XML字符串传递给类的构造函数并调用Build()方法。 它将返回您需要输出的分层文本。

如果有人对我设计的课程提供反馈和评论,我们将不胜感激。希望班级能够以更好的方式改变。

更新Solution

--SJ