2009-10-27 5 views
0

저는 C#에서 XML 처리를 많이 해오 고 있습니다. C#으로 오랜 시간 동안 자바 스크립트 코딩을하고 돌아 왔지만 JS의 멋진 단축키가 정말 빠져 있습니다.더 나은 무엇인가 : 객체 Deserialise 대 그냥 XML 문서에 대한 Xpathing?

많은 요소들, 하위 요소들로 구성된 상당한 크기의 XML 문서를 작성했습니다. 온라인 예약을위한 숙박/항공편/매력 티켓을 나타냅니다.

지금까지 필자는 필요한 정보를 얻기 위해 문서를 Xpathing했습니다. 나는 이제이를 헬퍼 함수로 옮기기 시작했다. 따라서 예를 들어 제 3자가 항공편을 타면 예약 처리 방법을 변경할 수 있습니다. Thats는 Xpath로 검사하기 쉽습니다. 요소의 값만 확인하면됩니다. 그래서 나는 Xpath가 한 곳에서만 있고 bool을 돌려주는 헬퍼 함수를 ​​가지고있다. 나는 단지 약 12 ​​개를 가지고있다. 그리고 지금까지 나는 예약으로서 모든 일을 다뤄 뒀다. 그러나 우리는 단지 예약의 비행 요소와 지난 4 도우미에 관한 누구나이었던 일을했다 방금 만든 비행기가 바로 비행 관련입니다.

전체 문서를 개체로 변환 할 필요가 없으므로 크기 때문에 현재해야 할 일이 매우 어려워서 현재 필요하지 않지만 여전히 실제로는 아닙니다. 이러한 모든 객체를 만드는 것은 큰 어려움이 될 것입니다.이 경로가 완료된 유사한 프로젝트에서 작업 했으므로 디버깅을 시도하거나 처음에는 머리를 숙이는 것이 좋습니다. 우리는 모든 문서를 사용하지 않고 있으며, 우리가 처리하는 처리량이 간신히 10 %를 사용하므로 모든 것을 비 직렬화하는 것이 약간 과소 설계된 것으로 보입니다. JS에서 그것을 deserialising하는 것은 산들 바람 일 것입니다. 그러나 C#은 단지 그것을 너무 오래 바람 핀으로 만듭니다. 나는 XSD.exe를 사용하여 고통을 덜어 낼 수 있다는 것을 알고 있지만 좋은 스키마 (물론 존재하지 않는) 없이는 이런 난장판이 사용된다는 것을 알았습니다.

하지만 우리는 항상 XML에서 객체의 거대한 컬렉션을 생성해야합니까, 아니면 여전히 받아 들일 수있는 빠른 방법일까요? 나는 그걸로 만족하지만 Object가 더 좋은 방법이 될지를 생각하고있다. 우리는 모든 것을 변환 한 다음 적어도 향후 프로젝트에서 필요할 때 사용할 수있게 될 것입니다.

나는 모든 것을 xpathing하는 속도에 대한 의견이있을 수 있지만, 우리가 현재 원하는 것은 충분히 빠르다는 것을 알고 있습니다.

XPathing을 계속 진행할 생각이라면 어떻게해야합니까?

답변

1

XML 스키마 (XSD)가있는 경우에는 항상 deserialize to object 접근 방식을 사용하는 것이 좋습니다. 멋진 CLR 개체로 작업하는 것이 더 쉽고 간단합니다.

XML 스키마가없고 데이터의 소스/공급자에서 가져올 수없는 경우 결정이 명확하지 않습니다. 여러분이 말했듯이, XSD.EXE은 방정식에서 벗어나지 만 추측 된 XML 스키마는 일반적으로 완벽하지도 않고 종종 예쁘지도 않습니다.

힘든 한 가지 - XPath를 사용하여 XML을 탐색하는 데 익숙하다고 느끼면 저는 그것에 충실 할 것입니다. XML을 자주 파싱해야하는 경우 XSD를 만드는 것이 좋습니다.

+0

시간을내어 답변 해 주셔서 감사합니다. 나는 그것의 ok를 알고 있고, 그것을하는 더러운 방법이 아니라고 잘 느낀다. 건배. –

1

예, XML의 10 % 만 필요한 경우 XPathing은 비 직렬화 과다로 인해 여기에서 정상적인 것으로 보입니다.

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

+0

시간을내어 답변 해 주셔서 감사합니다.나는 역동적 인 것들에 대해 읽을거야. 하지만 지금은 우리가 붙어있다 .net 1 불행히도 –

+0

당신은 당신이 .NET 1.1에 고생하고 있다는 것을 의미하기를 바랍니다. –