2013-03-21 3 views
4

Я использую System.Xml.XmlTextReader читатель с прямым доступом. При отладке в любое время я могу проверить свойства LineNumber и LinePosition, чтобы увидеть номер строки и номер столбца курсора. Есть ли способ увидеть какой-либо «путь» к курсору в документе?Каков путь к курсору документа?

Например, в следующем документе HTML, если курсор находился в точке *, путь будет выглядеть как html/body/p. Я бы нашел что-то вроде этого действительно полезным.

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

Edit: Я хотел бы также, чтобы иметь возможность осмотреть 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; 
    } 
} 
Смежные вопросы