2012-04-11 2 views
0

파이썬에서 lxml 메서드를 사용하여 구문 분석하려는 일부 XML이 있습니다. 요소를 구문 분석 한 결과 일부 구조화 된 오브젝트 (델타 찾기)를 비교할 수 있기를 원합니다.일부 '고르지 않은'XML에서 데이터베이스 레코드를 구성하는 가장 좋은 방법

구문 분석해야하는 XML 파일이 약 50 개 있으며 XML 데이터가 '고르지 않은'형식으로되어 있습니다 (올바른 이름이 무엇인지 잘 모르겠습니다).

간단한 예 XML :

나는 적절한 DB 내가 ID를 통해 각 개체를 분리하고, 매개 변수의 각 요소를 비교하는 데 사용할 수 있습니다 (MySQL은?) 구조를 만드는 방법에 대해 갈 것이라고 어떻게
<ID 1> 
<parameter A> 
<parameter B> 
</ID 1> 
<ID 2> 
<parameter A> 
<parameter B> 
<parameter C> 
</ID 2> 
<ID 3> 
<parameter A> 
</ID 3> 

.

이것이 의미가 있는지 확실하지 않습니다. 정확한 용어를 사용하는 것은별로 좋지 않습니다.

실제 소스 XML

은 여기에 나열된 모든 파일 : http://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm

이 파일은 몇 년 과거를 통해 업데이트 된 동일한 구조의 버전입니다. DB의 모든 XML 요소 (버전 번호, 릴리스 날짜, 두 개의 기본 섹션에있는 개별 ID 및 바이트 패턴으로 시작) 만 필요하지는 않습니다.

mysql으로 밀어 넣는 것이 최선의 방법은 아닐지 모르지만, 그렇게했다면 python/html 프론트 엔드를 사용하여 검색/비교 도구를 만들 것입니다.

답변

1

질문에 나를 위해 핵심 문구는 다음과 같습니다 당신이 부분 집합의 모든 요소를 ​​선행 알 수있는 점을 감안

'나는 모든 DB에서 XML 요소, 하위 집합을 필요로하지 않는'당신을 비교하고 싶습니다 각 데이터 요소에 대한 열이있는 단일 테이블을 제안합니다. 이렇게하면 나중에 데이터에 대한보고 요구 사항을보다 쉽게 ​​처리 할 수 ​​있습니다.

요소를 행별로 저장하는 다른 대안은 일반적으로 반 패턴으로 간주되며보고 및 비교가 훨씬 더 어려워 질 것입니다. 이런 종류의 전략을 비교할 요소의 유형 (또는 수)을 미리 모르는 경우 필요합니다.

편집 : 나는 테이블에 열이있을 것입니다 생각보다 명시하려면 ID, Paramater1, 매개 변수 2, parameterx 당신이보고 된 '비교 매개 변수'중 하나입니다 매개 매개 - 많은 이러한 이러한 매개 변수가 없으므로 열이 null로 남을 수 있습니다.

그러면 각 ID에 대해 해당 테이블의 모든 행과 한 행만 존재하게됩니다.

+0

'안티 패턴'은 필자가 읽을만한 새로운 개념입니다. 고맙습니다. 내가 볼 때의 어려움은 부분 집합을 상대적으로 고정 된 구조 (매우 할 수있는)로 가져갈 수 있다고하더라도 버전 당 테이블을 가질 수 있으며 매개 변수 섹션은 5 또는 그래서 매개 변수들, 그리고 오직 하나만. 나는 버전 당 객체 당 하나의 테이블을 가지고 수천 개의 테이블을 갖는 것이 터무니없는 것일까? –

+0

선택한 환경/언어/알고리즘에 대한 와우 - 전형적인 안티 패턴이 가장 교육적인 독서를위한 것입니다. 위키 - 피디아 – Elemental

+0

으로 시작하십시오. Heh, 초보자가 체크인합니다! ... :) –

관련 문제