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
    Amazon S3™s3
    Устройство хранения данных Windows Azure® Blobwasb, wasbs
    HDFS™hdfs

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

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

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

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

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

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

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

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

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

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

    Введенный в R2020b