2011-04-19 4 views
3

누락 된 특성이있는 요소에 대해 많은 XML 파일을 검색하는 유틸리티를 작성하라는 메시지가 표시되었습니다. 책임 부서는 수백 개의 파일을 손상시킬 수 있기 때문에 DTD에서 속성을 필수로 만들 수 없습니다. 수 일/주에 걸쳐 수작업으로 편집하려고합니다.스칼라 XML 끌어 오기 구문 분석기 및 위치

저는 스칼라 2.8.1에 작은 명령 행 도구를 쓰고 있습니다. 필자는 "pull"파서를 사용하여 코드 기능 프로그래밍을 순수하게 유지하고 멀티 스레드로 실행할 수 있습니다.

XML 이벤트의 위치가 필요합니다. Java 6 (javax.xml.stream. XMLStreamReader)에서 제공되는 API에는 이벤트의 행 번호를 리턴하는 메소드 (getLocation())가 있습니다. 이 방법을 사용하여 누락 된 속성을 찾을 위치를 알려주는 메시지를 작성할 수 있습니다.

scala.xml.pull.XMLEventReader에 끌어 오기 구문 분석기를 사용하고 싶지만 위치 정보를 제공하지 않는 것 같습니다.

내가 누락 된 항목이 있습니까? Scala API의 다른 곳인가요?

+0

가능한 [XML 요소의 소스 행을 추적하는 방법?] (http://stackoverflow.com/questions/4446137/how-to-track-the-source-line-of-an-xml- 요소) –

+0

이 질문의 (원본) 중복이 관련 링크 목록에 얼마나 낮은 지 놀라 울뿐입니다. 제목을 더 가깝게 만들기 위해 편집 해 보겠습니다. –

+0

어. 나는 원래의 질문이라고 생각했던 것이 완전한 XML 로더라는 것을 알지 못했다. 이것은 _pull_ reader에 대한 것이었다. 죄송합니다. 나는 가능한 한 내 투표를 닫을 것입니다. –

답변

3

내가 알 수있는 한, 이것은 XMLEventReader api에서 제공하지 않습니다.

io.Source에 의존하며 위치에 액세스 할 수는 있지만 액세스 할 수는 없습니다. 위치에 액세스 할 수있는 개체가 비공개이므로 쉽게 이동할 수있는 방법이 없습니다.

위치가 사용자 정의 XMLEventXMLEventReader 사본을 직접 만들 수도 있습니다. 수정하는 방법은 override def elemStart이며 위치에 액세스 할 수 있으며 각각 EvElemStart 다음에 EvPos(line:Int, column:Int)을 생성 할 수 있습니다.

특정 성능 관련 버그가 수정되어 2.9.RC1 사용을 고려해 볼 수도 있습니다.

+0

https://gist.github.com/930315를 참조하십시오. – huynhjl

관련 문제