나는 짓는다 Toolz.dev그리고 제가 하는 WordPress 와 Laravel 작업 전반에 걸쳐 반복되는 작업은 10~20 년 전에 설계된 시스템에 데이터를 공급하는 것입니다. 그 중 많은 사람들이 여전히 XML 을 사용하고 XML 만 사용합니다: 시장을 위한 제품 피드,회계 패키지의 가져오기 형식,다른 것을 보지 않는 SOAP 엔드포인트. 데이터는 거의 항상 스프레드시트에서 CSV 내보내기로 도착하므로 작업은 플랫 쉼표로 구분된 행을 구조화된 XML 문서로 바꾸는 것입니다. 두 열로 분할된 쉼표가 포함된 고객 이름부터 전체 파일을 구문 분석하지 못하게 만든 회사 이름의 앰퍼샌드에 이르기까지 가능한 모든 방법으로 잘못되는 것을 지켜보았습니다. 그만큼 CSV-XML 변환기 고객 목록을 익명 서버에 붙여넣지 않고 브라우저에서 해당 변환을 올바르게 수행하기 위해 존재합니다. 이 가이드에서는 변환에 포함되는 내용, 까다로운 부분이 까다로운 이유, 읽을 내용에 대한 출력 모양 방법을 다룹니다.
TL;DR: CSV-XML 변환기는 쉼표로 구분된 행을 읽고 잘 구성된 XML 문서로 작성하며,각 행은 요소가 되고 각 셀은 명명된 하위 요소 또는 속성이 됩니다. RFC 4180 에 따라 CSV 를 구문 분석하므로 쉼표,따옴표 또는 줄 바꿈이 포함된 인용 필드는 그대로 유지됩니다; 구분자가 쉼표,세미콜론, 탭 또는 파이프인지 여부를 자동 감지합니다; 열 이름을 유효한 XML 태그로 강제 지정합니다; 그리고 마크업 중요 문자를 벗어나 출력이 항상 구문 분석됩니다. 브라우저에서 완전히 실행되므로 CSV 의 데이터는 업로드되지 않습니다.
CSV 와 XML 의 차이점은 무엇입니까?
쉼표로 구분된 값인 CSV 는 평평한 텍스트 형식입니다. 각 줄은 레코드이며,줄 내에서 각 필드는 구분 기호,보통 쉼표로 구분됩니다. 컴팩트하고 모든 스프레드시트가 내보낼 수 있으며 사람이 읽을 수 없는 것은 구조나 의미를 표현하는 것입니다. CSV 에는 열의 의미,중첩 없음,유형 없음; 셀 보유 true 그리고 그 단어를 들고 있는 감방 true 구별할 수 없으며 쉼표가 포함된 값 자체는 두 필드로 읽히지 않도록 특별한 인용이 필요합니다.
확장 가능한 마크업 언어인 XML 은 반대의 거래입니다. 모든 값은 명명된 태그로 감싸져 있습니다 <name>Ada Lovelace</name> 값과 그에 대한 레이블을 모두 전달합니다. 그 장황함은 구조를 구입합니다: 요소 중첩,문서는 스키마에 대해 유효성을 검사할 수 있으며 스타일시트는 전체를 변형할 수 있습니다. 잘 구성된 XML 로 계산되는 규칙은 에 명시되어 있습니다 W3C XML 1.0 사양그리고 그들은 CSV가 결코 그렇지 않은 방식으로 엄격합니다. 이것이 바로 기계적 변환이 조심해야 하는 이유입니다. CSV를 XML로 변환하는 것은 근본적으로 CSV가 암시적으로 남기는 구조와 탈출을 추가하는 것입니다.
행은 어떻게 요소가 되나요?
자연 매핑은 첫 번째 CSV 행을 헤더로 처리하여 열 이름을 유지하고 다음 모든 행을 하나의 레코드로 처리합니다. 각 레코드는 행 요소가 되고 그 안에서 각 셀은 해당 열의 이름을 딴 하위 요소가 됩니다. 따라서 CSV 의 id,name,role 데이터 행과 1,Ada Lovelace,Engineer 된다:
<rows>
<row>
<id>1</id>
<name>Ada Lovelace</name>
<role>Engineer</role>
</row>
</rows>
외부 rows 요소는 문서 루트입니다. 왜냐하면 잘 구성된 XML 문서에는 다른 모든 것을 감싸는 최상위 요소가 정확히 하나 있어야 하기 때문입니다. 변환기를 사용하면 루트와 행당 요소의 이름을 모두 바꿀 수 있으므로 생성할 수 있습니다 <catalog><product>...</product></catalog> 대신 그것이 당신의 타겟이 기대하는 것일 때. 컬럼 이름은 태그 이름이 되고,이는 첫번째 실제 제약조건이 무는 곳입니다. 왜냐하면 모든 컬럼 표제가 합법적인 XML 태그는 아니기 때문입니다.
일부 열 이름이 변경되는 이유는 무엇입니까?
XML 요소 이름은 자유 형식이 아닙니다. 사양에 따르면 이름은 문자나 밑줄로 시작해야 하며 문자,숫자, 하이픈, 마침표 및 밑줄을 포함할 수 있지만 공백이나 대부분의 구두점은 포함하지 않으며 숫자로 시작하지 않을 수 있습니다.라는 스프레드시트 열 First Name 또는 Unit Price ($) 또는 2024 Total 는 완벽하게 좋은 표제어이며 불법적인 XML 태그입니다. 변환기가 방출된 경우 <First Name> 문서는 전혀 구문 분석하지 않습니다.
따라서 도구는 모든 열 이름을 유효한 태그로 살균합니다. 공백과 불법 문자는 밑줄이 됩니다 First Name 된다 First_Name그리고 숫자로 시작하는 이름에는 밑줄 접두사가 붙습니다 2024 Total 된다 _2024_Total. 두 열이 동일한 태그로 삭제되거나 헤더가 실제로 이름을 반복하는 경우 중복된 열에는 숫자 접미사가 붙으므로 어떤 열도 다른 열을 자동으로 덮어쓰지 않으며 이 작업을 수행한 경우 도구가 경고합니다. 중요한 보증은 태그 이름만 조정된다는 것입니다; 모든 셀 내부의 데이터는 그대로 유지됩니다. 정확하게 보존된 원본 레이블이 필요한 경우 속성 이름이 동일한 규칙을 따르지만 제목을 다른 곳에 값으로 표시하도록 선택할 수도 있기 때문에 아래에서 다루는 속성 모드가 더 적합한 경우가 많습니다.
값 안의 쉼표와 따옴표는 어떻습니까?
순진한 변환기를 깨는 부분인데,이해할 가치가 있습니다. CSV 는 인용 규칙을 가지고 있습니다. 에 공식화 된 RFC 4180는,구획 구분 기호나 줄 바꿈을 포함하는 값에 대해,그러한 값은 큰따옴표로 감싸져 있고,그 안에 있는 어떤 문자 그대로의 큰따옴표도 두 개의 큰따옴표로 쓰여집니다. 그래서 회사 필드 홀딩 Hopper, Grace CSV에 다음과 같이 저장됩니다 "Hopper, Grace"그리고 메모 읽기 she said "hi" 로 저장됩니다 "she said ""hi""".
각 줄을 쉼표로 나누는 변환기는 이 두 가지를 모두 망가뜨려 하나의 필드를 두 개로 바꾸고 모든 곳에 길 잃은 따옴표를 남깁니다. 이 도구는 인용된 필드 안에 있는지 추적하는 적절한 상태 기계 파서를 사용하므로 인용된 값 안에 포함된 쉼표,내장된 따옴표,심지어 개행까지 모두 자신이 속한 단일 필드의 일부로 읽습니다. 이것이 바로 고객이라는 이름의 차이입니다 Smith, John 하나로 도착합니다 <name> element 와 추가 열이 있는 깨진 레코드로 도착합니다. 내보내기가 Excel,Google Sheets 또는 데이터베이스 덤프에서 나온 경우 거의 확실하게 이 따옴표를 사용하며 올바르게 구문 분석하는 것은 선택 사항이 아닙니다.
값이 안전하게 구문 분석되면,여전히 XML 에 대해 안전하게 만들어져야 하는데,이는 별도의 이스케이프 문제입니다. XML 에서는 다섯 문자가 특별하며,요소 텍스트에서 중요한 세 문자는 앰퍼샌드,보다 작은 부호,보다 큰 부호를 포함하는 셀입니다 Ben & Jerry's 또는 x < y 문자 그대로 작성하면 유효하지 않은 XML이 생성되므로 변환기는 이를 미리 정의된 엔터티로 대체합니다 &, <, 그리고 >. 속성 값에서 큰따옴표도 이스케이프됩니다. 이 이스케이프는 데이터에 포함된 내용에 관계없이 출력 구문 분석을 보장하는 것입니다.
각 셀은 요소여야 합니까, 아니면 속성이어야 합니까?
XML 은 값을 넣을 수 있는 두 장소를 제공합니다: 자식 요소의 텍스트로,또는 행 요소의 속성으로. 변환기는 둘 다 지원하며,어떤 것이 옳은지는 파일을 읽을 시스템에 전적으로 의존합니다. 요소 모드는 읽을 수 있고 중첩 가능한 형태를 생성합니다:
<row>
<name>Ada</name>
</row>
속성 모드는 전체 행을 단일 자동 닫힘 요소로 축소합니다:
<row name="Ada" role="Engineer"/>
일반적으로 그것을 결정하는 차원에서 두 가지를 비교하는 방법은 다음과 같습니다:
| 고려사항 | 자식 요소 | 속성 |
|---|---|---|
| 가독성 | 더 높은, 선 당 1 개의 가치 | 더 조밀하고, 선 당 1 개의 줄 |
| 파일 크기 | 더 큰, 태그 반복 | 더 작은 |
| 나중에 더 둥지를 틀 수 있습니다 | 예 | 아니요 |
| 열당 반복되는 값 | 허용된 | 속성 이름당 하나의 값 |
| 전형적인 핏 | 문서 스타일 데이터, 피드 | 컴팩트 레코드, 구성 |
경험상 데이터가 기록적이고 평평하고 독자가 작기를 원한다면 속성은 괜찮습니다; 데이터가 나중에 구조로 성장할 수도 있고 인간이 그것을 읽을 경우 요소가 더 안전한 기본값입니다. 소비 시스템이 원하는 것이 무엇인지 확신할 수 없을 때 요소는 더 보수적인 선택입니다. 속성을 허용하는 모든 것도 요소에 적용될 수 있지만 그 반대가 항상 사실인 것은 아니기 때문입니다.
CSV-XML 변환기 사용 방법
1 단계: CSV 붙여넣기
입력 상자에 CSV 를 붙여넣거나 입력합니다. Excel 또는 Google Sheets 에서 바로 복사한 블록이 a 의 내용과 마찬가지로 작동합니다 .csv 쉼표나 줄 바꿈이 포함된 인용 필드를 포함한 파일입니다.
2 단계: 옵션을 설정합니다
구분 기호를 자동 감지 에 두거나 명시적으로 하나를 선택하고,첫 번째 행이 헤더인지 확인하고,루트와 행 요소 이름을 설정하고,각 셀이 하위 요소 또는 속성이 되는지 선택합니다. 또한 XML 선언을 전환하고 들여쓰기된 출력과 축소된 출력 사이를 전환할 수도 있습니다.
3 단계: 변환
XML 로 변환을 클릭합니다. 이 도구는 모든 행을 구문 분석하고 열 이름을 유효한 태그로 삭제하고 마크업 문자를 이스케이프하며 잘 구성된 문서를 조립하여 이름이 변경된 열이나 너덜너덜한 행에 대해 경고합니다.
4 단계: 복사 또는 다운로드
XML을 클립보드에 복사하거나 다운로드하세요 .xml 파일. 모양이 대상 시스템에 아주 적합하지 않은 경우 요소 이름을 조정하거나 요소와 속성 모드 사이를 전환한 후 다시 변환합니다.
구분 기호를 자동 감지하는 이유는 무엇입니까?
모든 "CSV"는 쉼표로 구분되지 않습니다. 유럽 로케일에서 내보내는 것은 자주 세미콜론을 사용합니다. 왜냐하면 쉼표는 해당 지역의 소수 구분 기호이고 데이터베이스나 로그에서 가져온 데이터는 종종 탭으로 구분되기 때문입니다. 쉼표로 잠긴 변환기는 세미콜론 파일을 하나의 넓은 열로 읽고 넌센스를 생성합니다. 이 도구는 쉼표,세미콜론, 탭 및 파이프를 시도하고 처음 여러 행에 걸쳐 일관된 열 수를 생성하는 항목을 선택하여 구분 기호를 감지합니다. 이는 산문 내부의 쉼표가 자주 나타나지만 불규칙하기 때문에 원시 주파수보다 훨씬 더 신뢰할 수 있는 신호입니다. 파일이 비정상적일 때 항상 추측을 무시할 수 있지만 일반적인 경우 감지는 붙여넣기를 의미합니다.
라인이 헤더보다 필드가 많거나 적은 래그 행은 다른 실제 엉망입니다. 변환기는 빈 요소로 짧은 행을 패딩하고 데이터를 조용히 삭제하는 대신 경고하므로 행 47 이 다운스트림에서 발견하는 대신 마지막 두 필드를 놓친 것을 볼 수 있습니다. 헤더 너머의 추가 필드는 일반 열 이름을 가져와 손실되지 않으며 경고는 정확히 얼마나 많은 행이 영향을 받았는지 알려 주며 일반적으로 소스의 길 잃은 구분 기호를 다시 추적하기에 충분합니다. 변환하기 전에 지저분한 파일을 검사하려는 경우 CSV 뷰어 동일한 허용 오차 파서가 있는 테이블로 렌더링합니다. 이는 잘못된 출력이 되기 전에 길 잃은 구분 기호나 닫히지 않은 따옴표를 찾는 가장 빠른 방법인 경우가 많습니다.
CSV-XML 변환기가 다른 모든 것과 맞는 곳
데이터 변환은 거의 단일 홉이 아닙니다. 오늘 XML 이 되어야 하는 동일한 CSV 가 REST API 의 경우 내일 JSON 이 되거나 데이터베이스 로드의 경우 SQL 삽입물 배치가 되어야 할 수도 있습니다. The CSV 에서 JSON 변환기 동일한 RFC 4180 파서로 JSON 대상을 처리합니다 CSV 에서 SQL 변환기 같은 행을 insert 문으로 바꿉니다. 데이터가 이미 XML 이고 다른 방향으로 가야 할 때,the XML 에서 JSON 변환기 그리고 the JSON-XML 변환기 XML-JSON 경계의 양방향을 커버하고 이 도구가 따르는 것과 동일한 속성 및 텍스트 규칙을 사용하므로 왕복 여행을 예측할 수 있습니다.
더 넓은 그림을 위해 CSV-JSON 가이드 동일한 지저분한 내보내기를 분석하는 방법을 더 깊이 파고듭니다 JSON-XML 가이드 JSON 측의 요소 및 속성 매핑을 설명합니다 온라인 도구의 데이터 개인 정보 보호 CSV 가 이름과 이메일 주소를 보유할 때 브라우저에서 이 모든 작업을 수행하는 것이 중요한 이유를 설명하는 문서입니다. Toolz.dev 의 모든 것과 마찬가지로 변환기는 브라우저에서 완전히 실행되므로 변환하는 데이터는 결코 머신을 떠나지 않습니다.
자주 묻는 질문
CSV 파일을 XML로 변환하려면 어떻게 해야 하나요?
입력 상자에 CSV 를 붙여넣고 구분 기호와 헤더 설정을 확인한 후 XML 로 변환을 클릭합니다. 첫 번째 행은 열 이름으로 읽혀지고,다음 행은 모두 해당 열의 이름을 따서 자식 태그가 명명된 XML 요소가 된 다음 결과를 복사하거나.xml 파일로 다운로드할 수 있습니다.
CSV 헤더 행은 어떻게 되나요?
"first 행이 header"일 때,헤더 셀은 모든 데이터 행에 대한 XML 요소 이름이 됩니다. 이름은 유효한 XML 태그로 삭제되므로 "First Name"는 First_Name 이 되고 중복된 열은 숫자 접미사로 이름이 변경됩니다. 헤더 옵션을 끄면 열의 이름은 column_1,column_2 등으로 지정됩니다.
각 셀은 요소여야 합니까, 아니면 속성이어야 합니까?
XML 을 읽는 시스템에 따라 다릅니다. 요소 모드는 값당 하나의 태그로 읽을 수 있는 중첩 가능한 구조를 작성하는 반면 속성 모드는 열당 하나의 속성을 갖는 단일 컴팩트 요소로 행을 축소합니다. 이 변환기는 두 가지를 모두 지원하므로 스키마 또는 가져오기 대상이 기대하는 요소를 선택하십시오; 요소는 확실하지 않을 때 더 안전한 기본값입니다.
변환기는 값 내부의 쉼표를 처리합니까?
예. RFC 4180 에 이어 CSV 에서 쉼표,큰따옴표 또는 줄 바꿈이 포함된 값을 큰따옴표로 감싸고 포함된 따옴표를 두 따옴표로 작성합니다. 파서는 인용된 필드를 분할하는 대신 단일 값으로 읽으므로 "Hopper,Grace"는 한 요소에 유지됩니다.
어떤 구분 기호가 지원됩니까?
쉼표, 세미콜론, 탭 및 파이프. 기본적으로 도구는 처음 여러 행에 걸쳐 일관된 수의 열을 생성하는 열을 선택하여 구분 기호를 자동 감지하며, 이는 유럽 세미콜론 파일 및 탭으로 구분된 내보내기를 올바르게 처리합니다. 구분 기호를 수동으로 선택할 수도 있습니다.
XML에서 일부 열 이름이 변경되는 이유는 무엇입니까?
XML 요소 이름은 공백이나 대부분의 구두점을 포함할 수 없으며 숫자나 하이픈으로 시작할 수 없습니다. 변환기는 불법 문자를 밑줄로 대체하고 숫자로 시작하는 이름 앞에 접두사를 붙이기 때문에 출력은 항상 잘 구성됩니다. 각 셀의 원본 데이터는 변경되지 않고 태그 이름만 변경됩니다.
내 CSV 데이터가 서버에 업로드됩니까?
아니요. 전체 변환은 JavaScript 로 브라우저에서 실행됩니다. 붙여 넣는 것은 전송되거나 기록되거나 저장되지 않으며 페이지가로드되면 도구가 네트워크 연결없이 계속 작동하므로 CSV 의 이름,이메일 및 기타 데이터가 비공개로 유지됩니다.
XML 을 다시 CSV 로 변환하거나 JSON 으로 변환할 수 있습니까?
이 도구는 CSV 를 XML 로 변환합니다. 데이터를 다른 방식으로 재구성하려면 XML 을 JSON 변환기로 사용하고 XML 이 아닌 JSON 이 대상일 때 CSV 를 JSON 변환기로 사용합니다. 모두 동일한 개인 정보 보호 보장으로 클라이언트 측에서 실행됩니다.



