더 나은 점:XML 문서에 대해 객체로 역직렬화하는 것과 그냥 Xpathing하는 것?

StackOverflow https://stackoverflow.com/questions/1630164

문제

저는 최근에 C#에서 많은 XML 처리를 수행해 왔으며 오랜 시간 동안 자바스크립트 코딩을 마치고 C#으로 돌아온 후에는 JS의 멋진 단축키 중 일부가 정말 누락되었습니다.

나는 많은 요소, 하위 요소 등으로 구성된 상당한 규모의 XML 문서를 작성했습니다.온라인 예약을 위한 숙박/항공편/관광명소 티켓을 나타냅니다.

지금까지 나는 필요한 정보를 꺼내기 위해 문서를 Xpathing했습니다.이제 이러한 기능을 도우미 기능으로 옮기기 시작했습니다.예를 들어 제3자의 항공편이 있는 경우 예약을 처리하는 방법을 변경하고 싶을 수도 있습니다.Xpath를 사용하면 쉽게 확인할 수 있습니다. 요소의 값만 확인하면 됩니다.그래서 나는 Xpath가 한 곳에만 있고 bool을 반환하도록 하는 도우미 함수를 가지고 있습니다.저는 이 중 12개 정도만 받았고 지금까지 모든 것을 예약으로 처리해 왔습니다. 하지만 우리는 예약의 항공편 요소와 마지막 4명의 도우미에 관한 몇 가지 작업을 방금 수행했습니다. 방금 만든 것은 비행과 매우 관련되어 있어서 내가 이 일을 제대로 하고 있는지 생각하게 되었습니다.

전체 문서를 개체로 변환할 필요성을 피했습니다. 크기 때문에 매우 고통스럽고 현재는 필요하지 않지만 여전히 실제로는 그렇지 않기 때문입니다.이러한 모든 객체를 생성하는 것은 엄청난 고통이 될 것이며 저는 이 경로가 완료된 유사한 프로젝트에서 작업했으며 디버깅하거나 처음에 머리를 숙이는 것이 고통스럽습니다.우리는 모든 문서를 사용하지 않고, 우리가 수행하는 처리는 문서의 10%도 거의 사용하지 않으므로 모든 것을 역직렬화하는 것이 약간 과도하게 엔지니어링된 것처럼 보였습니다.JS에서 역직렬화하는 것은 쉬운 일이지만 C#에서는 너무 지루해집니다.XSD.exe를 사용하여 일부 고통을 없앨 수 있다는 것을 알고 있지만 좋은 스키마(물론 존재하지 않음) 없이 사용하면 그렇게 엉망이라는 것을 알았습니다.

하지만 우리는 항상 XML에서 거대한 개체 컬렉션을 만들어야 하는가, 아니면 내가 수행한 빠른 방법이 여전히 허용될 수 있는지 생각하게 되었습니다.나는 그것에 만족하지만 객체가 더 나은 방법이 될지 생각해보려고 노력하고 있습니다.우리가 그것을 모두 변환했다면 적어도 향후 프로젝트에 필요할 경우를 대비해 사용할 수 있을 것입니다.

모든 것을 xpathing하는 속도에 대해 몇 가지 의견이 있을 수 있다는 것을 알고 있지만 현재 우리가 원하는 것에 대해서는 충분히 빠르므로 여기서는 문제가 되지 않습니다.

XPathing을 계속해도 괜찮은지에 대한 생각이 있으신가요?

도움이 되었습니까?

해결책

XML 스키마(XSD)가 있는 경우 아마도 항상 개체 접근 방식에 대한 역직렬화를 선호할 것입니다. 멋진 CLR 개체를 사용하여 작업하는 것이 더 쉽고 깔끔합니다.

XML 스키마가 없고 데이터 소스/공급자로부터 스키마를 얻을 수 없는 경우 결정이 명확하지 않습니다.당신이 말한대로, XSD.EXE 방정식에서 일부 고통을 덜어줄 수 있지만 이러한 추론된 XML 스키마는 일반적으로 완벽하지도 않고 매우 예쁘지도 않습니다.

어려운 점 - XPath를 사용하여 XML을 탐색하는 것이 편하다면 나는 이를 고수할 것입니다.매우 자주 구문 분석해야 하는 XML이 있는 경우 XSD를 만드는 것이 결국에는 좋은 생각일 수 있습니다.

다른 팁

예, XML의 10%만 필요한 경우 역직렬화 과잉 가능성으로 인해 여기에서는 XPathing이 괜찮은 것 같습니다.

C# 4.0과 DLR에는 동적 XML 구조를 동적으로 탐색할 수 있는 키워드입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top