2009-03-03 2 views
1

C#에서는 문서가 파일이나 문자열에서로드 될 때 원본 XML 'text'에서 XmlNode의 위치를 ​​계산하는 방법이 있습니까? 내가 처리중인 XML 문서의 문제점을보고 할 수 있기를 원합니다.XML을 파싱 할 때 'row'및 'column'노드에 액세스하는 방법

예 :

"오류 foo.xml에 - 속성 '애완 동물'의 값 라인 (27)에 솜털 포유 동물의 종, 열 (13)해야합니다 [여기 원래 XML 텍스트의 조각 ...] "

편집 : 수표는 스키마 유효성 검사를 사용하여 수행 할 수 없습니다. "Addins.LogWindow '는 공개 여야합니다.

답변

1

XML 스키마를 사용할 수 있습니까? 예를 들면 다음과 같습니다.

http://support.microsoft.com/kb/318504

+0

초기에는 스키마에 대해서도 유효성을 검사하고 있지만, 수행해야 할 검사는 XSD로 수행 할 수 없습니다. – mackenir

1

죄송합니다, 당신을위한 노드의 원래 구문 분석 된 위치를 기억 거의 DOM 구현이있다. 대부분은 구문 분석 오류에 대한 위치 정보 만보고합니다. 예를 들어 DOM Level 3 LS에서는 DOMError이있을 때만 DOMLocator에 대한 참조를 얻을 수 있습니다.

내가 아는 유일한 imp는 구문 분석 후에 pxdom이며, 이는 파이썬을위한 것입니다. 그래서 많은 도움이되지 않습니다.

2

글쎄 당신은 자신의 XmlParser를 작성하지 않아도되지만 Compact Framework에서는 XmlDocument가 Kamine의 Dalai Lama만큼 느리기 때문에 Xml 파일을 구문 분석 할 때 XmlReader를 사용하므로 선택의 여지가 없습니다.

무언가가 엉망이거나 일치하지 않을 때마다 예외가 발생하고 XmlReader를 예외로 전달합니다. 그런 다음 XmlReader를 줄과 위치의 속성을 포함하는 IXmlLineInfo 개체로 캐스팅하여 줄 위치를 추출 할 수 있습니다.

도움이 될지 모르겠다. 일반적으로 필자는 데스크탑에 내 자신의 XmlParser를 작성하지 않으므로이 솔루션을 제안하는 것이 과장된 것입니다.

+0

아하. XmlNode의 형제 및 부모 (루트 요소까지)에 상대적인 XmlNode의 위치를 ​​고려할 때 XmlTextReader를 사용하여 해당 요소가 파일에있는 위치를 찾을 수 있다고 생각합니다. 즉 : 루트 요소의 두 번째 요소의 세 번째 요소 -> XmlTextReader를 사용하여이 요소를 읽고 pos를 얻습니다. – mackenir

+0

처음에는 XmlReader를 사용하여 구문 분석하는 경우 더 많이 생각하고있었습니다. xml을 구문 분석하고 유효성을 검사하기 위해 어떤 객체를 사용합니까? 그것은 XmlDocument입니까? – Quibblesome

+0

오, 안돼 ... XmlReader는 실제로 XML 파일을 읽는 데 너무 복잡합니다 :). 난 내 계획을 가지고있어 - 문서를 구문 분석의 쉬운 일은 XmlDocument로 끝난 다음 XmlTextReader를 사용하는 요소의 위치를 ​​얻는다. 나는 어떤 점에서이 Q를 A로 업데이트 할 것이다 - 그것은 '충분히 좋은'해결책이다. – mackenir

관련 문제