Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

readstruct

从文件创建结构体

    说明

    示例

    S = readstruct(filename) 通过从文件中读取结构化数据来创建一个结构体。输入文件必须包含格式正确的 XML 结构。

    readstruct 自动检测输入文件中内容的数据类型。

    示例

    S = readstruct(filename,Name,Value) 基于文件创建一个结构体,并通过一个或多个名称-值对组参数指定其他选项。例如,当 filename 中的文件扩展名不是 .xml 时,您可以通过调用 S = readstruct(filename,'FileType','xml') 以 XML 形式读取输入文件的内容。

    示例

    全部折叠

    以结构体形式读取 XML 文件,从该结构体创建变量,并查询其内容。

    文件 music.xml 具有以下结构。

    music.xml 作为结构体 S 读入 MATLAB 中。此结构体包含一个父节点 MusicalEnsemble,该节点有两个同级节点 EnsembleMusicians

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

    从第一个同级节点创建一个变量 bandband 有三个字段,其中一个是名为 Instrumentation 的结构体。

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

    band 中查询 Instrumentation 以查看其内容。

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

    从第二个同级节点创建一个变量 musiciansmusicians 有一个名为 Name 的字段,其中包含五个结构体。

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

    从不包含统一结构化数据的 XML 文件创建一个结构体,然后显示其内容。

    如果一个同级节点包含其他同级节点没有的字段,则对于在其他节点中找不到的字段,readstruct 将返回 missing。例如,在文件 music.xml 中,第二个 Instrument 节点包含非空字段 pianotype。由于其他 Instrument 节点没有为 pianotype 指定的值,因此对于在这些 Instrument 节点下的 pianotypereadstruct 返回 missing

    将 XML 文件 music.xml 读取到结构体 S

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

    在 S 中查询 Instrument 结构体以查看其内容。

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

    以结构体形式读取一个文本文件。

    文件 music.txt 具有以下结构。

    将文本文件 music.txt 作为结构体 S 读入 MATLAB 中。将 'FileType' 指定为 'xml',以将输入的内容作为 XML 文件读取。

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

    通过使用 'StructNodeName' 名称-值对组,从输入文件中的特定元素节点创建一个结构体。

    从 XML 文件 music.xml 中读取 Instrumentation 节点。

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

    指定在其下开始读取输入文件中的结构体的准确 XML 元素节点。

    读取 XML 文件 music.xml 中的第五个 Name 元素。将该元素节点的完整 XPath 表达式指定为 'StructSelector' 的值。

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

    使用 RegisteredNamespaces 名称-值参数将自定义 XML 命名空间前缀注册到输入文件中的现有命名空间 URL。

    要以结构体形式读取第二个 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'

    Internet URL

    如果文件指定为 Internet 统一资源定位器 (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® Blob Storagewasbwasbs
    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 匹配其名称与 StructNodeName 中指定的值匹配的 XML 文档中的第一个节点。

    示例: '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 和前缀数组组成的以逗号分隔的对组。读取函数在计算 XML 文件的 XPath 表达式时使用这些前缀。将命名空间前缀及其关联的 URL 指定为 N×2 字符串数组。RegisteredNamespaces 还可以用于计算由选择器名称-值参数(例如 readstructStructSelectorreadtablereadtimetableVariableSelectors)指定的 XPath 表达式。

    默认情况下,读取函数会自动检测要注册以用于 XPath 计算的命名空间前缀,但您也可以使用 RegisteredNamespaces 名称-值参数注册新命名空间前缀。当 XML 节点有命名空间 URL 但在 XML 文件中没有声明的命名空间前缀时,您可以注册新命名空间前缀。

    例如,对名为 example.xml 的不包含命名空间前缀的 XML 文件计算 XPath 表达式。将 '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 选择器名称-值参数(例如 RowSelectorVariableSelector)支持以下 XPath 语法。

      • 要选择其名称与您要选择的节点匹配的每个节点,而无论它在文档中的位置如何,请使用 "//myNode" 语法。您可以使用 "//myNode" 省略在要选择的节点前面的 XPath 表达式。

      • 要读取文件中一个父节点下的几个同级节点之一,您可以指定 ChildNode[n],其中 n 对应于要进行索引的同级节点。例如,路径 "/RootNode/ChildNode[2]" 选择其父元素为 RootNode 的第二个 ChildNode 元素。

      • 要读取属于输入 XML 文件中某元素节点的属性的值,请在该属性的名称前指定 @。例如,"/RootNode/ChildNode[2]/@AttributeName" 选择属于其父元素为 RootNode 的第二个 ChildNode 元素的属性 AttributeName

    另请参阅

    在 R2020b 中推出