2013-03-21 133 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; 
    } 
}