(Rozszerzanie odpowiedź od @ komentarzu Andy'ego)
Tam nie jest zbudowany w sposób to zrobić przy użyciu XmlDocument
(jeśli używasz XDocument
, można użyć przeciążenie XDocument.Load()
który akceptuje LoadOptions.SetLineInfo
- zobacz this question).
Chociaż nie ma wbudowanego sposób można użyć klasy PositionXmlDocument
otoki stąd (z projektu SharpDevelop):
https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs
Aby go wykorzystać, trzeba będzie użyć Load
przeciążenie, które akceptuje przeciążenie XmlReader
(pozostałe przeciążenia Load
przejdą do zwykłej klasy XmlDocument
, która nie daje informacji o numerze linii). Jeśli używasz przeciążenie XmlDocument.Load
który akceptuje nazwę pliku, trzeba będzie zmienić kod w następujący sposób:
using (var reader = new XmlTextReader(filename))
{
var doc = new PositionXmlDocument();
doc.Load(reader);
}
Teraz powinieneś być w stanie rzucić żadnego XmlNode
z tego dokumentu do PositionXmlElement
aby pobrać numer wiersza i kolumna:
var node = doc.ChildNodes[1];
var elem = (PositionXmlElement) node;
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition);
Dla bieżącego .net byłoby świetnie, ale niestety wciąż piszę dla .net 2.0 z lat 80-tych. (Wspomniałem w pytaniu, ale nie chciałem umawiać się na randkę) –
Myślałem, że tak być może. Pomiędzy tymi dwoma, myślę, że wolałbym podejście "XPathDocument". – dahlbyk
Trzymaj z podejściem XmlDocument i spójrz na ten kod jako opakowanie: https://github.com/icsharpcode/SharpDevelop/blob/master/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/PositionXmlDocument.cs – Andy