2009-10-27 2 views
0

해당 XML 파일을 생성하기위한 xml 스키마 및 csv 데이터가 있습니다.주어진 xsd 스키마에 따라 csv 데이터에서 xml 생성

찾았습니다. 주어진 CSV 파일에서 xml 파일을 생성하는 방법은 this입니다. 그러나 내 스키마의 경우 요소 때문에 항상 동일한 매핑이됩니다. 따라서 마지막 5 개의 열은 DataType 열에 따라 매핑됩니다.

대소 문자를 구분하여 코드를 확장하고 각 요소를 각 경우에 따라 매핑 할 수 있지만이를 수행하는 더 간단한 방법이 있어야합니다. 나는 XML에 익숙하지 않다. 도움이 필요하다.
피씨 : 나는 상업적이며 자유로운 모든 도구를 사용하여 매핑 기능을 광고했지만이 작업을 수행하지 못했습니다. 또한 Excel은 비정규화된 스키마에서 작동하지 않습니다.

도움을 주신 데 감사드립니다.
Update1 : 도구 : C# 명령 줄 코드가 가장 쉽습니다.Update2 : 목표는 지정된 CSV 파일의 데이터를 사용하여 지정된 스키마로 XML을 생성하는 것입니다.

CSV 데이터

EntityName,FieldName,SQLType,DataType,Nullable,Caption,ColumnIndex,MinStringLength,MaxStringLength,D_Precision,D_Scale 
SOChemistryRequirement,CE_Min,"decimal(7, 5)",Decimal,TRUE,CE_Min,82,,,7,5 
SOChemistryRequirement,CE_Max,"decimal(7, 5)",Decimal,TRUE,CE_Max,83,,,7,5 
SOTestRequirement,Weldability,bit,bool,FALSE,Weldability,107,,,, 
SONumber,SONumber,varchar(6),string,FALSE,SONumber,0,,6,, 

스키마 정의 :

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="DataTypes" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<!-- No empty string data type. --> 
<xs:simpleType name="NoEmptyString"> 
    <xs:restriction base="xs:string"> 
    <xs:minLength value="1" /> 
</xs:restriction> 
</xs:simpleType> 

<!-- Root element. --> 
<xs:element name="ExcelFile"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element name="SheetName" type="NoEmptyString" /> 
    <xs:element name="CellRange" type="NoEmptyString" /> 
    <!-- Definition of columns. --> 
    <xs:element name="Columns"> 
     <xs:complexType> 
     <xs:sequence maxOccurs="unbounded"> 
      <!-- Information about one column. --> 
      <xs:element name="Column"> 
      <xs:complexType> 
       <xs:sequence> 
       <!-- Column index in excel file. --> 
       <xs:element name="ColumnIndex" type="xs:unsignedByte" /> 
       <!-- Caption for current column in grid in importing screen. --> 
       <xs:element name="Caption" type="xs:string" /> 
       <!-- Data type of current column. --> 
       <xs:element name="DataType"> 
        <xs:complexType> 
        <!-- It can be only one from following: --> 
        <xs:choice> 
         <xs:element name="Boolean"/> 
         <xs:element name="Int16"> 
         <xs:complexType> 
          <xs:sequence> 
          <xs:element name="MinValue" type="xs:short" minOccurs="0" /> 
          <xs:element name="MaxValue" type="xs:short" minOccurs="0" /> 
          </xs:sequence> 
         </xs:complexType> 
         </xs:element> 
         <xs:element name="Int32"> 
         <xs:complexType> 
          <xs:sequence> 
          <xs:element name="MinValue" type="xs:int" minOccurs="0" /> 
          <xs:element name="MaxValue" type="xs:int" minOccurs="0" /> 
          </xs:sequence> 
         </xs:complexType> 
         </xs:element> 
         <xs:element name="Int64"> 
         <xs:complexType> 
          <xs:sequence> 
          <xs:element name="MinValue" type="xs:long" minOccurs="0" /> 
          <xs:element name="MaxValue" type="xs:long" minOccurs="0" /> 
          </xs:sequence> 
         </xs:complexType> 
         </xs:element> 
         <xs:element name="Decimal"> 
         <xs:complexType> 
          <xs:sequence> 
          <xs:element name="MinValue" type="xs:decimal" minOccurs="0" /> 
          <xs:element name="MaxValue" type="xs:decimal" minOccurs="0" /> 
          <xs:element name="Precision" type="xs:int" minOccurs="0" /> 
          <xs:element name="Scale" type="xs:int" minOccurs="0" /> 
          </xs:sequence> 
         </xs:complexType> 
         </xs:element> 
         <xs:element name="DateTime"/> 
         <xs:element name="String"> 
         <xs:complexType> 
          <xs:sequence> 
          <xs:element name="MinLength" type="xs:int" minOccurs="0" /> 
          <xs:element name="MaxLength" type="xs:int" minOccurs="0" /> 
          </xs:sequence> 
         </xs:complexType> 
         </xs:element> 
         <xs:element name="Custom"/> 
        </xs:choice> 
        </xs:complexType> 
        </xs:element> 
        <!-- Can be NULL value? --> 
        <xs:element name="IsNullable" type="xs:boolean" /> 
        <!-- Entity name. Cannot be NULL. --> 
        <xs:element name="EntityName" type="NoEmptyString" /> 
        <!-- Field name. It can be NULL because of composite target field. --> 
        <xs:element name="FieldName" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+1

먼저 사용 가능한 도구 또는 결과를 얻기 위해 사용하려는 도구에 대한 힌트를 제공해야합니다. 즉, 질문이 지나치게 명확하지 않은 것입니다. 둘째로 당신이 달성하고자하는 것에 대해 좀 더 명확하게 밝혀진다면 도움이 될 것입니다. CSV에서 XML 로의 변환은 복잡하지 않지만 CSV와 CSV 구조를 반영하는 복잡한 XML 문서는 다소 어려움이 있습니다. – Murph

답변

0

빠른 솔루션 (이것은 일회성 인 경우)에 다음과 같습니다

  1. 사용 mysqlimport CSV를 임시로 가져 오기 mysql 테이블
  2. mysqldump -X을 사용하여 테이블을 간단한 XML 파일로 출력하십시오.
  3. 출력 된 XML을 XSL 스타일 시트로 처리하여 필요한 스키마에 매핑하십시오.

이 정기적으로 무언가가 더 강력하고있는 경우/스크립트 더 좋을 것이나, 원칙은 동일합니다 :

1) CSV로 변환 매우 간단 같은 형식 등의 XML CSV :

<csv> 
    <record> 
    <EntityName>SOChemistryRequirement</EntityName> 
    <FieldName>CE_Min</FieldName> 
    <SQLType>"decimal(7, 5)"</SQLType> 
    <DataType>Decimal</DataType> 
    <Nullable>TRUE</Nullable> 
    <Caption>CE_Min</Caption> 
    <ColumnIndex>82</ColumnIndex> 
    <MinStringLength></MinStringLength> 
    <MaxStringLength></MaxStringLength> 
    <D_Precision>7</D_Precision> 
    <D_Scale>5</D_Scale> 
    </record> 
    <!-- etc... --> 
</csv> 

2) XML을 XSL로 처리하여 스키마에 따라 형식화 된 XML 문서를 가져옵니다.

관련 문제