exponenta event banner

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 ®

    Укажите имя файла в 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
    Амазонский S3™s3
    Хранилище больших двоичных объектов Windows Azure ®wasb, wasbs
    HDFS™hdfs

    Дополнительные сведения см. в разделе Работа с удаленными данными.

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

    Аргументы пары «имя-значение»

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

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

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

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

    • 'xml' - Чтение содержимого входного файла в формате XML.

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

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

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

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

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

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

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

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

    суффикс атрибута, указанный как пара, разделенная запятыми, состоящая из 'AttributeSuffix' и либо вектор символов, либо строковый скаляр. readstruct добавляет этот суффикс ко всем именам полей структуры вывода, которые соответствуют атрибутам во входном 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 поддерживаются для аргументов «имя-значение селектора XPath», таких как RowSelector или VariableSelector.

      • Чтобы выбрать каждый узел, имя которого соответствует выбранному узлу, независимо от его расположения в документе, используйте "//myNode" синтаксис. Вы можете использовать "//myNode" чтобы опустить выражение XPath, предшествующее узлу, который требуется выбрать.

      • Чтобы прочитать один из нескольких одноранговых узлов под одним родительским узлом в файле, можно указать ChildNode[n], где n соответствует одноранговому узлу, который требуется проиндексировать. Например, путь "/RootNode/ChildNode[2]" выбирает второе ChildNode элемент, родительский элемент которого RootNode.

      • Чтобы считать значение атрибута, принадлежащего узлу элемента во входном XML-файле, укажите @ перед именем атрибута. Например, "/RootNode/ChildNode[2]/@AttributeName" выбирает атрибут AttributeName относится ко второму ChildNode элемент, родительский элемент которого RootNode.

    См. также

    Представлен в R2020b