Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

xmlImportOptions

XML 파일에 대한 import options 객체

R2021a 이후

설명

XMLImportOptions 객체를 사용하면 MATLAB®이 XML 파일에서 구조화된 테이블 형식 데이터를 가져오는 방법을 지정할 수 있습니다. 이 객체는 누락된 데이터나 오류를 처리하는 속성과 데이터 가져오기 프로세스를 제어하는 속성을 가집니다.

생성

XMLImportOptions 객체는 여기에서 설명하는 xmlImportOptions 함수를 사용하거나 detectImportOptions 함수를 사용하여 만들 수 있습니다.

  • xmlImportOptions를 사용하면 가져오기 요구 사항을 기반으로 가져오기 속성을 정의할 수 있습니다.

  • detectImportOptions를 사용하면 filename에 지정된 XML 파일의 내용을 기반으로 가져오기 속성을 감지하고 채울 수 있습니다.

    opts = detectImportOptions(filename)

설명

opts = xmlImportOptions는 1개의 변수를 갖는 XMLImportOptions 객체를 만듭니다.

opts = xmlImportOptions('NumVariables',numVars)numVars에 지정된 개수만큼의 변수를 갖는 객체를 만듭니다.

예제

opts = xmlImportOptions(___,Name,Value)는 하나 이상의 이름-값 인수를 사용하여 XMLImportOptions 객체의 속성을 추가로 지정합니다.

입력 인수

모두 확장

변수 개수로, 양의 정수 스칼라로 지정됩니다.

속성

모두 확장

변수 속성

변수 이름으로, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열로 지정됩니다. VariableNames 속성은 변수를 가져올 때 사용할 이름을 포함합니다.

데이터에 N개 변수가 포함되어 있지만 변수 이름이 지정되지 않은 경우 VariableNames 속성은 {'Var1','Var2',...,'VarN'}을 포함합니다.

공백과 비ASCII 문자가 포함된 변수 이름과 같이 유효하지 않은 MATLAB 식별자를 변수 이름으로 사용할 수 있도록 하려면 VariableNamingRule의 값을 'preserve'로 설정하십시오.

예: opts.VariableNames는 현재(감지된) 변수 이름을 반환합니다.

예: opts.VariableNames(3) = {'Height'}는 세 번째 변수의 이름을 Height로 변경합니다.

데이터형: char | string | cell

변수 이름을 유지할지 지정하는 플래그로, "modify" 또는 "preserve" 중 하나로 지정됩니다.

  • "modify" — 유효하지 않은 변수 이름(유효 여부는 isvarname 함수의 판정에 따름)을 유효한 MATLAB 식별자로 변환합니다.

  • "preserve" — 공백과 비ASCII 문자가 포함된 변수 이름과 같이 MATLAB 식별자로 유효하지 않은 변수 이름을 그대로 유지합니다.

R2019b부터 변수 이름과 행 이름에 공백, 비ASCII 문자 등 모든 문자를 사용할 수 있습니다. 또한 영문자뿐만 아니라 어떤 문자로도 시작할 수 있습니다. 변수 이름과 행 이름은 유효한 MATLAB 식별자(유효 여부는 isvarname 함수의 판정에 따름)가 아니어도 됩니다. 변수 이름과 행 이름을 그대로 유지하려면 VariableNamingRule의 값을 "preserve"로 설정하십시오. VariableNamingRule의 값이 "modify"에서 "preserve"로 변경될 때 변수 이름은 새로 고쳐지지 않습니다.

데이터형: char | string

변수의 데이터형으로, 유효한 데이터형 이름을 포함하는 문자형 벡터로 구성된 셀형 배열 또는 string형 배열로 지정됩니다. VariableTypes 속성은 변수를 가져올 때 사용할 데이터형을 지정합니다.

VariableTypes 속성을 업데이트하려면 setvartype 함수를 사용하십시오.

예: opts.VariableTypes는 현재 변수 데이터형을 반환합니다.

예: opts = setvartype(opts,'Height',{'double'})은 변수 Height의 데이터형을 double로 변경합니다.

가져올 변수의 서브셋으로, 문자형 벡터, string형 스칼라, 문자형 벡터로 구성된 셀형 배열, string형 배열 또는 숫자형 인덱스로 구성된 배열로 지정됩니다.

SelectedVariableNamesVariableNames 속성에 포함된 이름의 서브셋이어야 합니다. 기본적으로, SelectedVariableNamesVariableNames 속성의 모든 변수 이름을 포함합니다. 즉, 모든 변수를 가져옵니다.

원하는 변수만 가져오려면 SelectedVariableNames 속성을 사용하십시오. 변수의 서브셋만 가져오려면 SelectedVariableNames 속성을 사용하여 서브셋을 지정하고 readtable을 사용하십시오.

공백과 비ASCII 문자가 포함된 변수 이름과 같이 유효하지 않은 MATLAB 식별자를 변수 이름으로 사용할 수 있도록 하려면 VariableNamingRule의 값을 'preserve'로 설정하십시오.

예: opts.SelectedVariableNames = {'Height','LastName'}은 가져오기 작업에 두 개의 변수 HeightLastName만 선택합니다.

예: opts.SelectedVariableNames = [1 5]는 가져오기 작업에 두 개의 변수, 즉 첫 번째 변수와 다섯 번째 변수만 선택합니다.

예: T = readtable(filename,opts)opts 객체의 SelectedVariableNames 속성에 지정된 변수만 포함하는 테이블을 반환합니다.

데이터형: uint16 | uint32 | uint64 | char | string | cell

유형별 변수 가져오기 옵션으로, variable import options 객체로 구성된 배열로 반환됩니다. 이 배열은 VariableNames 속성에 지정된 각 변수에 대응되는 객체를 포함합니다. 배열에 포함된 각 객체는 해당 데이터형 데이터를 가져오는 데 필요한 속성을 포함합니다.

변수 옵션은 숫자, 텍스트, logical, datetime, 또는 categorical 데이터형을 지원합니다.

변수에 대한 현재(또는 감지된) 옵션을 쿼리하려면 getvaropts 함수를 사용하십시오.

변수에 대해 옵션을 설정하고 사용자 지정하려면 setvaropts 함수를 사용하십시오.

예: opts.VariableOptionsVariableImportOptions 객체의 모음을 반환합니다. 모음에 포함된 각 객체는 데이터의 각 변수에 대응됩니다.

예: getvaropts(opts,'Height')Height 변수에 대한 VariableImportOptions 객체를 반환합니다.

예: opts = setvaropts(opts,'Height','FillValue',0)은 변수 HeightFillValue 속성을 0으로 설정합니다.

변수 설명 XPath 표현식으로, 읽기 함수가 테이블 변수 설명을 선택하는 데 사용하는 문자형 벡터 또는 string형 스칼라로 지정됩니다. 유효한 XPath 버전 1.0 표현식으로 VariableDescriptionsSelector를 지정해야 합니다.

예: 'VariableDescriptionsSelector','/RootNode/ChildNode'

테이블 변수 XPath 표현식으로, 읽기 함수가 테이블 변수를 선택하는 데 사용하는 문자형 벡터의 셀형 배열 또는 string형 배열로 지정됩니다. 유효한 XPath 버전 1.0 표현식으로 VariableSelectors를 지정해야 합니다.

예: 'VariableSelectors',{'/RootNode/ChildNode'}

예: 'VariableSelectors',"/RootNode/ChildNode"

예: 'VariableSelectors',["/RootNode/ChildNode1","/RootNode/ChildNode2"]

변수 단위 XPath로, 읽기 함수가 테이블 변수 단위를 선택하는 데 사용하는 문자형 벡터 또는 string형 스칼라로 지정됩니다. 유효한 XPath 버전 1.0 표현식으로 VariableUnitsSelector를 지정해야 합니다.

예: 'VariableUnitsSelector','/RootNode/ChildNode'

테이블 속성

테이블 행 이름 XPath 표현식으로, 읽기 함수가 테이블 행의 이름을 선택하는 데 사용하는 문자형 벡터 또는 string형 스칼라로 지정됩니다. 유효한 XPath 버전 1.0 표현식으로 RowNamesSelector를 지정해야 합니다.

예: 'RowNamesSelector','/RootNode/ChildNode'

테이블 행 XPath 표현식으로, 읽기 함수가 출력 테이블의 개별 행을 선택하는 데 사용하는 문자형 벡터 또는 string형 스칼라로 지정됩니다. 유효한 XPath 버전 1.0 표현식으로 RowSelector를 지정해야 합니다.

예: 'RowSelector','/RootNode/ChildNode'

테이블 데이터 XPath 표현식으로, 읽기 함수가 출력 테이블 데이터를 선택하는 데 사용하는 문자형 벡터 또는 string형 스칼라로 지정됩니다. 유효한 XPath 버전 1.0 표현식으로 TableSelector를 지정해야 합니다.

예: 'TableSelector','/RootNode/ChildNode'

등록된 XML 네임스페이스 접두사의 집합으로, RegisteredNamespaces 및 접두사 배열이 쉼표로 구분되어 지정됩니다. 읽기 함수는 XML 파일에서 XPath 표현식을 실행할 때 이러한 접두사를 사용합니다. 네임스페이스 접두사 및 관련 URL을 Nx2 string형 배열로 지정합니다. RegisteredNamespacesreadstructStructSelector 또는 readtablereadtimetableVariableSelectors와 같이 선택자 이름-값 인수로 지정된 XPath 표현식을 실행할 때 사용할 수 있습니다.

기본적으로, 읽기 함수는 XPath 실행에 사용하기 위해 등록할 네임스페이스 접두사를 자동으로 감지합니다. 그러나 사용자가 RegisteredNamespaces 이름-값 인수를 사용하여 새 네임스페이스 접두사를 등록할 수도 있습니다. XML 노드에 네임스페이스 URL이 있지만 XML 파일에 선언된 네임스페이스 접두사가 없는 경우 새 네임스페이스 접두사를 등록할 수 있습니다.

예를 들어, 네임스페이스 접두사가 포함되지 않은 example.xml이라는 XML 파일에서 XPath 표현식을 실행해 보겠습니다. 'RegisteredNamespaces'["myprefix", "https://www.mathworks.com"]으로 지정하여 URL https://www.mathworks.com에 접두사 myprefix를 할당합니다.

T = readtable("example.xml", "VariableSelector", "/myprefix:Data",...
 "RegisteredNamespaces", ["myprefix", "https://www.mathworks.com"])

예: 'RegisteredNamespaces',["myprefix", "https://www.mathworks.com"]

대체 규칙

누락된 데이터를 관리하는 방법으로, 다음 표에 있는 값 중 하나로 지정됩니다.

누락 규칙동작
'fill'

누락된 데이터를 FillValue 속성의 내용으로 대체합니다.

FillValue 속성은 가져올 변수의 VariableImportOptions 객체에 지정됩니다. FillValue 속성에 액세스하는 데 대한 자세한 내용은 getvaropts를 참조하십시오.

'error'가져오기를 중지하고 누락된 레코드와 필드를 보여주는 오류 메시지를 표시합니다.
'omitrow'누락된 데이터가 포함된 행을 생략합니다.
'omitvar'누락된 데이터가 포함된 변수를 생략합니다.

예: opts.MissingRule = 'omitrow';

데이터형: char | string

가져오기 오류를 처리하는 절차로, 다음 표에 있는 값 중 하나로 지정됩니다.

가져오기 오류 규칙동작
'fill'

오류가 발생한 데이터를 FillValue 속성의 내용으로 대체합니다.

FillValue 속성은 가져올 변수의 VariableImportOptions 객체에 지정됩니다. FillValue 속성에 액세스하는 데 대한 자세한 내용은 getvaropts를 참조하십시오.

'error'가져오기를 중지하고 오류를 일으킨 레코드와 필드를 보여주는 오류 메시지를 표시합니다.
'omitrow'오류가 발생한 행을 생략합니다.
'omitvar'오류가 발생한 변수를 생략합니다.

예: opts.ImportErrorRule = 'omitvar';

데이터형: char | string

테이블의 주어진 행에서 반복되는 XML 노드를 처리하는 절차로, 'addcol', 'ignore' 또는 'error'로 지정됩니다.

반복 노드 규칙

동작

'addcol'

테이블의 변수 헤더 아래에 반복 노드에 대한 열을 추가합니다. 'RepeatedNodeRule'의 값을 'addcol'로 지정하면 반복되는 노드에 대해 테이블에 별도의 변수가 생성되지 않습니다.

'ignore'

반복되는 노드를 가져오는 작업을 건너뜁니다.

'error'오류 메시지를 표시하고 가져오기 작업을 중단합니다.

예: 'RepeatedNodeRule','ignore'

예제

모두 축소

XML 파일용 XML 가져오기 옵션을 생성하고, 가져올 변수를 지정한 다음 데이터를 읽어 들입니다.

XML 파일 students.xml에는 Student라는 이름의 형제 노드 4개가 있으며 각 노드에는 동일한 자식 노드와 특성이 포함되어 있습니다.

type students.xml
<?xml version="1.0" encoding="utf-8"?>
<Students>
    <Student ID="S11305">
        <Name FirstName="Priya" LastName="Thompson" />
        <Age>18</Age>
        <Year>Freshman</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">591 Spring Lane</Street>
            <City>Natick</City>
            <State>MA</State>
      </Address>
      <Major>Computer Science</Major>
      <Minor>English Literature</Minor>
   </Student>
   <Student ID="S23451">
        <Name FirstName="Conor" LastName="Cole" />
        <Age>18</Age>
        <Year>Freshman</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">4641 Pearl Street</Street>
            <City>San Francisco</City>
            <State>CA</State>
        </Address>
        <Major>Microbiology</Major>
        <Minor>Public Health</Minor>
    </Student>
    <Student ID="S119323">
        <Name FirstName="Morgan" LastName="Yang" />
        <Age>21</Age>
        <Year>Senior</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">30 Highland Road</Street>
            <City>Detriot</City>
            <State>MI</State>
        </Address>
        <Major>Political Science</Major>
   </Student>
   <Student ID="S201351">
        <Name FirstName="Salim" LastName="Copeland" />
        <Age>19</Age>
        <Year>Sophomore</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">3388 Moore Avenue</Street>
            <City>Fort Worth</City>
            <State>TX</State>
        </Address>
        <Major>Business</Major>
        <Minor>Japanese Language</Minor>
   </Student>
   <Student ID="S201351">
        <Name FirstName="Salim" LastName="Copeland" />
        <Age>20</Age>
        <Year>Sophomore</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">3388 Moore Avenue</Street>
            <City>Fort Worth</City>
            <State>TX</State>
        </Address>
        <Major>Business</Major>
        <Minor>Japanese Language</Minor>
    </Student>
    <Student ID="54600">
        <Name FirstName="Dania" LastName="Burt" />
        <Age>22</Age>
        <Year>Senior</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">22 Angie Drive</Street>
            <City>Los Angeles</City>
            <State>CA</State>
        </Address>
        <Major>Mechanical Engineering</Major>
        <Minor>Architecture</Minor>
   </Student>
    <Student ID="453197">
        <Name FirstName="Rikki" LastName="Gunn" />
        <Age>21</Age>
        <Year>Junior</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">65 Decatur Lane</Street>
            <City>Trenton</City>
            <State>ME</State>
        </Address>
        <Major>Economics</Major>
        <Minor>Art History</Minor>
   </Student>
</Students>

파일에서 XMLImportOptions 객체를 만듭니다. VariableSelectors의 값을 //@FirstName으로 지정하여 FirstName 요소 노드를 테이블 변수로 가져올 항목으로 선택합니다.

opts = xmlImportOptions("VariableSelectors","//@FirstName");

options 객체와 함께 readtable을 사용하여 지정된 변수를 가져옵니다.

T = readtable("students.xml",opts)
T=7×1 table
       Var1   
    __________

    {'Priya' }
    {'Conor' }
    {'Morgan'}
    {'Salim' }
    {'Salim' }
    {'Dania' }
    {'Rikki' }

XML 파일의 내용을 테이블로 가져옵니다.

students.xml 파일에는 Student라는 이름의 형제 노드 7개가 있으며 각 노드에는 동일한 자식 노드와 특성이 포함되어 있습니다.

type students.xml
<?xml version="1.0" encoding="utf-8"?>
<Students>
    <Student ID="S11305">
        <Name FirstName="Priya" LastName="Thompson" />
        <Age>18</Age>
        <Year>Freshman</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">591 Spring Lane</Street>
            <City>Natick</City>
            <State>MA</State>
      </Address>
      <Major>Computer Science</Major>
      <Minor>English Literature</Minor>
   </Student>
   <Student ID="S23451">
        <Name FirstName="Conor" LastName="Cole" />
        <Age>18</Age>
        <Year>Freshman</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">4641 Pearl Street</Street>
            <City>San Francisco</City>
            <State>CA</State>
        </Address>
        <Major>Microbiology</Major>
        <Minor>Public Health</Minor>
    </Student>
    <Student ID="S119323">
        <Name FirstName="Morgan" LastName="Yang" />
        <Age>21</Age>
        <Year>Senior</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">30 Highland Road</Street>
            <City>Detriot</City>
            <State>MI</State>
        </Address>
        <Major>Political Science</Major>
   </Student>
   <Student ID="S201351">
        <Name FirstName="Salim" LastName="Copeland" />
        <Age>19</Age>
        <Year>Sophomore</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">3388 Moore Avenue</Street>
            <City>Fort Worth</City>
            <State>TX</State>
        </Address>
        <Major>Business</Major>
        <Minor>Japanese Language</Minor>
   </Student>
   <Student ID="S201351">
        <Name FirstName="Salim" LastName="Copeland" />
        <Age>20</Age>
        <Year>Sophomore</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">3388 Moore Avenue</Street>
            <City>Fort Worth</City>
            <State>TX</State>
        </Address>
        <Major>Business</Major>
        <Minor>Japanese Language</Minor>
    </Student>
    <Student ID="54600">
        <Name FirstName="Dania" LastName="Burt" />
        <Age>22</Age>
        <Year>Senior</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">22 Angie Drive</Street>
            <City>Los Angeles</City>
            <State>CA</State>
        </Address>
        <Major>Mechanical Engineering</Major>
        <Minor>Architecture</Minor>
   </Student>
    <Student ID="453197">
        <Name FirstName="Rikki" LastName="Gunn" />
        <Age>21</Age>
        <Year>Junior</Year>
        <Address>
            <Street xmlns="https://www.mathworks.com">65 Decatur Lane</Street>
            <City>Trenton</City>
            <State>ME</State>
        </Address>
        <Major>Economics</Major>
        <Minor>Art History</Minor>
   </Student>
</Students>

먼저, XML 파일의 특징을 검출하기 위해 detectImportOptions를 사용해서 XMLImportOptions 객체를 만듭니다. VariableSelectors 이름-값 인수를 Street 요소 노드의 XPath 표현식으로 지정하여 도로 이름만 테이블로 읽어옵니다. RegisteredNamespaces 이름-값 인수를 설정하여 사용자 지정 네임스페이스 접두사를 기존 네임스페이스 URL에 등록합니다.

opts = detectImportOptions("students.xml",RegisteredNamespaces=["myPrefix","https://www.mathworks.com"], ...
    VariableSelectors="//myPrefix:Street");

그런 다음 import options 객체와 함께 readtable을 사용하여 지정된 변수를 가져옵니다.

T = readtable("students.xml",opts)
T=7×1 table
          Street       
    ___________________

    "591 Spring Lane"  
    "4641 Pearl Street"
    "30 Highland Road" 
    "3388 Moore Avenue"
    "3388 Moore Avenue"
    "22 Angie Drive"   
    "65 Decatur Lane"  

  • XPath 선택기를 사용하여 XML 입력 문서의 어느 요소를 가져올지 지정합니다. 예를 들어, 다음의 구조를 갖는 XML 파일 myFile.xml을 가져오고자 한다고 가정하겠습니다.

    <data>
        <table category="ones">
            <var>1</var>
            <var>2</var>
        </table>
        <table category="tens">
            <var>10</var>
            <var>20</var>
        </table>
    </data>
    
    이 테이블은 XPath 선택기 이름-값 인수(예: VariableSelectors 또는 TableSelector)에 지원되는 XPath 구문을 제공합니다.

    선택 작업구문결과
    문서에서의 위치에 관계없이 선택하려는 노드와 이름이 일치하는 모든 노드를 선택합니다.이름 앞에 두 개의 슬래시(//)를 붙입니다.
    data = readtable('myFile.xml', 'VariableSelectors', '//var')
    data =
    
      4×1 table
    
        var
        ___
    
         1 
         2 
        10 
        20 
    요소 노드에 속한 특성 값을 읽어 들입니다.특성 앞에 골뱅이 기호(@)를 붙입니다.
    data = readtable('myFile.xml', 'VariableSelectors', '//table/@category')
    data =
    
      2×1 table
    
        categoryAttribute
        _________________
    
             "ones"      
             "tens"   
    노드 세트에서 특정 노드를 선택합니다.대괄호([]) 안에 선택하고자 하는 노드 인덱스를 제공합니다.
    data = readtable('myFile.xml', 'TableSelector', '//table[1]')
    data =
    
      2×1 table
    
        var
        ___
    
         1 
         2 
    
    연산 우선 순위를 지정합니다.먼저 평가할 표현식을 괄호로 묶습니다.
    data = readtable('myFile.xml', 'VariableSelectors', '//table/var[1]')
    data =
    
      2×1 table
    
        var
        ___
    
         1 
        10 
    data = readtable('myFile.xml', 'VariableSelectors', '(//table/var)[1]')
    data =
    
      table
    
        var
        ___
    
         1 

버전 내역

R2021a에 개발됨