2011-04-12 4 views

답변

8

내가 아는 유일한 다른 옵션 of는 XDocument.Load()이고, 그의 과부하는 LoadOptions.SetLineInfo을 수용합니다. 이것은 XmlDocument과 거의 같은 방법으로 소비됩니다. 더 당신이 XDocument를 사용하는 경우 (XmlDocument를 사용하여이 작업을 수행하는 방법이 내장되어

Example

+0

현재로서는 .net이 좋을 것입니다.하지만 불행히도 저는 여전히 .net 2.0을 작성하고 있습니다. (I 질문에서 언급 한 것입니다하지만 난 게시물을 데이트하고 싶지 않았다) –

+0

나는 그런 경우가 될 줄 알았는데. 다른 두 가지 사이에서, 나는'XPathDocument' 접근 방식을 선호한다고 생각합니다. – dahlbyk

+3

XmlDocument 방식을 고수하고이 코드를 래퍼로 살펴보십시오. https://github.com/icsharpcode/SharpDevelop/blob/master/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/PositionXmlDocument.cs – Andy

5

(앤디의 코멘트 @에서 확장 응답), 당신은 LoadOptions.SetLineInfo을 허용 XDocument.Load() 오버로드를 사용할 수 있습니다 - 참조 this question). 더 내장 된 방법은 없지만

있습니다 (SharpDevelop 프로젝트에서) 여기에서 PositionXmlDocument 래퍼 클래스를 사용할 수 있습니다

https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs

를 사용하려면, 당신은 Load를 사용해야합니다 XmlReader을 허용 과부하 (다른 Load 오버로드 당신에게 줄 번호 정보를 제공하지 않습니다 정규 XmlDocument 클래스로 이동합니다). 당신이 줄 번호를 검색 PositionXmlElement이 문서에서 어떤 XmlNode 캐스팅 할 수 있어야

using (var reader = new XmlTextReader(filename)) 
{ 
    var doc = new PositionXmlDocument(); 
    doc.Load(reader); 
} 

을 이제 : 현재 파일 이름을 허용하는 XmlDocument.Load 오버로드를 사용하는 경우, 다음과 같이 코드를 변경해야합니다 및 열 :

var node = doc.ChildNodes[1]; 
var elem = (PositionXmlElement) node; 
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition); 
+0

이것은 정말 retrospectivley를 추가 할 때 유용합니다. XmlDocument를 기반으로 많은 코드를 작성했으며이 파일을 추가 한 다음 3 줄의 코드를 추가하여 유용한 위치 정보 사용자 의견을 제시 할 수 있다고 제안했습니다.) ... 필요합니다. ICSharpCode.WpfDesign.XamlDom를 사용하여'추가;'- 그건 아마도 C#을 사용자에게 눈부시게 분명하지만, 나는 C#을 새로운 오전 : 오 ... 일을! –