2013-03-21 108 views
4

我正在使用System.Xml.XmlTextReader只读阅读器。在调试时,我可以随时查看属性LineNumberLinePosition以查看光标的行号和列号。有什么办法可以在文档中看到光标的任何“路径”?文档光标的路径是什么?

例如,在下面的HTML文档中,如果光标位于*处,则路径将类似于html/body/p。我会发现这样的事情真的很有帮助。

<html> 
    <head> 
    </head> 
    <body> 
     <p>*</p> 
    </body> 
</html> 

编辑:我也想能够类似地检查XmlWriter

回答

2

据我所知你不能用普通的XmlTextReader来做到这一点;但是,您可以扩展它以通过新的Path属性提供此功能:

public class XmlTextReaderWithPath : XmlTextReader 
{ 
    private readonly Stack<string> _path = new Stack<string>(); 

    public string Path 
    { 
     get { return String.Join("/", _path.Reverse()); } 
    } 

    public XmlTextReaderWithPath(TextReader input) 
     : base(input) 
    { 
    } 

    // TODO: Implement the other constuctors as needed 

    public override bool Read() 
    { 
     if (base.Read()) 
     { 
      switch (NodeType) 
      { 
       case XmlNodeType.Element: 
        _path.Push(LocalName); 
        break; 

       case XmlNodeType.EndElement: 
        _path.Pop(); 
        break; 

       default: 
        // TODO: Handle other types of nodes, if needed 
        break; 
      } 

      return true; 
     } 

     return false; 
    } 
}