readstruct

Создайте структуру из файла

    Описание

    пример

    S = readstruct(filename) создает структуру путем чтения структурированных данных из файла. Входной файл должен содержать правильно построенную структуру XML.

    readstruct автоматически обнаруживает типы данных содержимого во входном файле.

    пример

    S = readstruct(filename,Name,Value) создает структуру из файла с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, можно считать содержимое входного файла как XML когда расширение файла в filename не .xml путем вызова S = readstruct(filename,'FileType','xml').

    Примеры

    свернуть все

    Считайте XML-файл как структуру, создайте переменные из структуры и запросите ее содержимое.

    Файл music.xml имеет следующую структуру.

    Считайте music.xml в MATLAB как структура S. Эта структура содержит один родительский узел MusicalEnsemble это имеет два одноуровневых узла, Ensemble и Musicians.

    S = readstruct("music.xml")
    S = struct with fields:
         Ensemble: [1x1 struct]
        Musicians: [1x1 struct]
    
    

    Создайте переменную band от первого одноуровневого узла. band имеет три поля, одно из которых является структурой под названием Instrumentation.

    band = S.Ensemble
    band = struct with fields:
                  Music: "Jazz"
               BandName: "Kool Katz"
        Instrumentation: [1x1 struct]
    
    

    Запросите Instrumentation в band просмотреть его содержимое.

    band.Instrumentation
    ans = struct with fields:
        Instrument: [1x4 struct]
    
    

    Создайте переменную musicians от второго одноуровневого узла. musicians имеет одно поле под названием Name, который содержит пять структур.

    musicians = S.Musicians
    musicians = struct with fields:
        Name: [1x5 struct]
    
    

    Создайте структуру из XML-файла, который не содержит однородно-структурированные-данные, затем показывает его содержимое.

    Если одноуровневый узел содержит поля, которые другие одноуровневые узлы не имеют, readstruct возвращает missing для полей, которые не найдены в других узлах. Например, в файле music.xml, второй Instrument узел содержит непустое поле pianotype. Начиная с другого Instrument узлам не задали значение для pianotype, readstruct возвращает missing для pianotype под теми Instrument узлы.

    Считайте XML-файл music.xml к структуре S.

    S = readstruct("music.xml")
    S = struct with fields:
         Ensemble: [1x1 struct]
        Musicians: [1x1 struct]
    
    

    Запросите Инструментальную структуру в S, чтобы просмотреть его содержимое.

    S.Ensemble.Instrumentation.Instrument
    ans=1×4 struct array with fields:
        typeAttribute
        Text
        pianotype
        drumkit
        basstype
    
    

    Считайте текстовый файл как структуру.

    Файл music.txt имеет следующую структуру.

    Считайте текстовый файл music.txt в MATLAB как структура S. Задайте 'FileType' как 'xml' считать содержимое входа как XML-файл.

    S = readstruct("music.txt","FileType","xml")
    S = struct with fields:
         Ensemble: [1x1 struct]
        Musicians: [1x1 struct]
    
    

    Создайте структуру из определенного узла элемента во входном файле при помощи 'StructNodeName' пара "имя-значение".

    Считайте Instrumentation узел от XML-файла music.xml.

    S = readstruct("music.xml","StructNodeName","Instrumentation")
    S = struct with fields:
        Instrument: [1x4 struct]
    
    

    Задайте точный узел элемента XML, под которым можно начать читать структуру во входном файле.

    Считайте пятый Name элемент в XML-файле music.xml. Задайте полное выражение XPath узла элемента как значение 'StructSelector'.

    S = readstruct("music.xml","StructSelector","/MusicalEnsemble/Musicians/Name[5]")
    S = struct with fields:
        roleAttribute: "bassist"
                 Text: "John"
    
    

    Укажите пользовательский префикс пространства имен XML к существующему пространству имен URL во входном файле с помощью RegisteredNamespaces аргумент значения имени.

    Считать второй Street узел элемента как структура, задайте значение 'StructSelector' как '//Student[2]/Address/myPrefix:Street' и значение RegisteredNamespaces как ["myPrefix","https://www.mathworks.com"].

    S = readstruct("students.xml","RegisteredNamespaces",["myPrefix","https://www.mathworks.com"],...
        "StructSelector",'//Student[2]/Address/myPrefix:Street')
    S = struct with fields:
        xmlnsAttribute: "https://www.mathworks.com"
                  Text: "4641 Pearl Street"
    
    

    Входные параметры

    свернуть все

    Имя файла, чтобы читать в виде вектора символов или строкового скаляра.

    В зависимости от местоположения вашего файла, filename может взять одну из следующих форм.

    Местоположение

    Форма

    Текущая папка или папка на MATLAB® path

    Задайте имя файла в filename.

    Пример: 'myFile.xml'

    Файл в папке

    Если файл не находится в текущей папке или в папке на пути MATLAB, то задайте полное имя или относительный путь в filename.

    Пример: 'C:\myFolder\myFile.xml'

    Пример: 'dataDir\myFile.xml'

    Интернет URL

    Если файл задан как интернет-универсальный локатор ресурса (URL), то filename должен содержать тип протокола 'http://' или 'https://'.

    Пример: 'http://hostname/path_to_file/my_data.xml'

    Удаленное местоположение

    Если файл хранится в удаленном местоположении, то filename должен содержать полный путь файла, заданного с формой:

    scheme_name://path_to_file/my_file.ext

    На основе удаленного местоположения, scheme_name может быть одно из значений в этой таблице.

    Удаленное местоположениеscheme_name
    Amazon S3™s3
    Windows Azure® Устройство хранения данных блобаwasb, wasbs
    HDFS™hdfs

    Для получения дополнительной информации смотрите работу с Удаленными данными.

    Пример: 's3://bucketname/path_to_file/my_setup.xml'

    Аргументы name-value

    Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

    Пример: 'ImportAttributes',true задает, чтобы импортировать атрибуты, сопоставленные с узлами элемента как поля структуры output.

    Тип файла в виде разделенной запятой пары, состоящей из 'FileType' и одно из этих значений:

    • 'auto' — Автоматически обнаружьте формат файла входного файла от расширения, заданного в filename.

    • 'xml' — Считайте содержимое входного файла как XML.

    Если расширение файла в filename не .xml, можно задать значение 'FileType' как 'xml' считать содержимое входного файла как XML.

    Пример: 'FileType','xml'

    Локаль для чтения дат в виде разделенной запятой пары, состоящей из 'DateLocale' и вектор символов или строковый скаляр формы xx_YY, где:

    • YY прописная альфа ISO 3166-1 2 кода, указывающие на страну.

    • xx строчный ISO 639-1 двухбуквенный код, указывающий на язык.

    Эта таблица приводит некоторые общие значения для локали.

    Локаль ЯзыкСтрана
    'de_DE'Немецкий языкГермания
    'en_GB'Английский языкСоединенное Королевство
    'en_US'Английский языкСоединенные Штаты
    'es_ES'Испанский языкИспания
    'fr_FR'Французский языкФранция
    'it_IT'Итальянский языкИталия
    'ja_JP'Японский языкЯпония
    'ko_KR'Корейский языкКорея
    'nl_NL'Нидерландский языкНидерланды
    'zh_CN'Китайский язык (упрощен)Китай

    Пример: 'DateLocale','ja_JP'

    Запуск элемента XML в виде разделенной запятой пары, состоящей из 'StructNodeName' и или вектор символов или строковый скаляр readstruct читает структуру во входном файле, начиная с заданного элемента XML. Если вы не задаете StructNodeName, затем readstruct читает структуру, запускающуюся в корне XML-файла.

    readstruct совпадает с первым узлом в XML-документе, имя которого совпадает со значением, заданным в StructNodeName.

    Пример: 'StructNodeName','RootName'

    Запуск пути XML в виде разделенной запятой пары, состоящей из 'StructSelector' и вектор символов или строковый скаляр readstruct читает структуру во входном файле, запускающемся в элементе в заданном пути. Значение 'StructSelctor' должно быть допустимое выражение версии 1.0 XPath.

    Импортируйте атрибуты в виде разделенной запятой пары, состоящей из 'ImportAttributes' и любой 1 TRUE) или 0 ложь). Если вы задаете значение как false, затем readstruct не импортирует атрибуты XML во входном файле как поля в структуре output.

    Пример: 'ImportAttributes',false

    Суффикс атрибута в виде разделенной запятой пары, состоящей из 'AttributeSuffix' и или вектор символов или строковый скаляр. readstruct добавляет этот суффикс ко всем именам полей структуры output, которые соответствуют атрибутам во входном XML-файле. Если вы не задаете 'AttributeSuffix', затем readstruct значения по умолчанию к добавлению суффиксного 'Attribute' ко всем именам полей, соответствующим атрибутам во входном XML-файле.

    Пример: 'AttributeSuffix','_att'

    Набор зарегистрированных префиксов пространства имен XML в виде разделенной запятой пары, состоящей из RegisteredNamespaces и массив префиксов. Функция чтения использует эти префиксы при оценке выражений XPath на XML-файле. Задайте префиксы пространства имен и их связанные URL как массив строк Nx2. RegisteredNamespaces может использоваться, когда вы также оцениваете выражение XPath, заданное селекторным аргументом значения имени, таким как StructSelector для readstruct, или VariableSelectors для readtable и readtimetable.

    По умолчанию функция чтения автоматически обнаруживает префиксы пространства имен, чтобы указать для использования в оценке XPath, но можно также указать новые префиксы пространства имен с помощью RegisteredNamespaces аргумент значения имени. Вы можете указать новый префикс пространства имен, когда узел XML имеет пространство имен URL, но никакой заявленный префикс пространства имен в XML-файле.

    Например, оцените выражение XPath на XML-файле под названием example.xml это не содержит префикс пространства имен. Задайте 'RegisteredNamespaces' как ["myprefix", "https://www.mathworks.com"] присваивать префиксный myprefix к URL https://www.mathworks.com.

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

    Пример: 'RegisteredNamespaces',["myprefix", "https://www.mathworks.com"]

    Выходные аргументы

    свернуть все

    Вывод структуры. Структура является типом данных, которым группирует связанные данные с помощью контейнеров данных, называемых полями. Каждое поле может содержать любой тип данных. Данные о доступе в структуре с помощью записи через точку формы structName.fieldName. Для получения дополнительной информации о структурах смотрите struct.

    Советы

    • Используйте селекторы 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, которые поддерживаются для аргументов name-value селектора XPath, таких как VariableSelectors или TableSelector.

      Операция выбораСинтаксисПримерРезультат
      Выберите каждый узел, имя которого совпадает с узлом, который вы хотите выбрать, независимо от его местоположения в документе.Снабдите префиксом имя две наклонных черты вправо (//).
      data = readtable('myFile.xml', 'VariableSelectors', '//var')
      data =
      
        4×1 table
      
          var
          ___
      
           1 
           2 
          10 
          20 
      Считайте значение атрибута, принадлежащего узлу элемента.Снабдите префиксом атрибут знак at sign (@).
      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 

    Смотрите также

    Введенный в R2020b