如何填充属性树?

属性树可以解析4种文件,现在,我就将其一一列出

  • XML
  • JSON
  • INI
  • INFO

XML Parser

XML格式是用于以文本形式存储信息的行业标准。不幸的是,在撰写本文时,没有XML解析器。因此,该库包含快速和微小的RapidXML解析器(当前版本1.13),以提供XML解析支持。RapidXML并不完全支持XML标准;它不能解析dtd,因此不能进行完全的实体替换。【说一句废话,其实,也没有要这个东西完全支持XML的解析,因为,完全的XML的解析,可以使用更加专业的库,如TinyXML2之类的,这个XML解析,仅仅是解析,类似于配置文件之类的XML,超级强大的XML的解析,反而用不上的】

默认情况下,解析器将保留大部分空白,但删除仅包含空白的元素内容。【也就是,只有空白的东西,他就不保留了】

编码的whitespaces(例如,#32;)在这方面不算作空白。您可以通过trim_whitespace标志,如果您想要所有的引导和拖尾空白,并且所有连续的空白都折叠成一个单独的空间

请注意,RapidXML不理解编码规范。如果传递一个字符缓冲区,它假定数据已经正确编码;如果您传递给它一个文件名,它将使用您给它的地区的字符转换来读取文件(如果您不给它的话,则使用全局语言环境)。这意味着,为了将一个utf -8编码的XML文件解析为wptree,您必须提供一个替代的语言环境,或者直接或通过替换全局变量

XML /property 树转换模式(read_xml和write_xml):

  • 每个XML元素对应于一个属性树节点。子元素对应于节点的子元素
  • XML元素的属性存储在subkey 中。属性节点中每个属性有一个子节点。当没有属性时,节点的存在没有保证或必要。
  • XML注释存储在名为的节点中,除非通过标记启用注释忽略。
  • 文本内容以两种方式存储,这取决于标记。默认方式将所有文本节点连接起来,并将它们存储为元素节点的数据。这样,整个内容可以方便地读取,但是文本和子元素的相对顺序丢失了。另一种方法是将每个文本内容存储为一个单独的节点,都称为<xmltext>
  • XML存储编码不能完美地往返。读写周期丢失了修剪的空白、低级格式化信息以及正常数据和CDATA节点之间的区别。只在启用时保留注释。一个写读周期丢失了修剪的空白;也就是说,如果原始树的字符串数据以空格开始或结束,那么空格就会丢失。

JSON Parser

JSON格式是一种数据交换格式,源自JavaScript的对象文字符号。(JSON代表JavaScript对象符号。)JSON是一种简单的、紧凑的格式,适用于任何深度的松散结构节点树,非常类似于属性树数据集。它不像XML那样结构化,也没有模式支持,但是它的优点是更简单、更小,而且不需要复杂的模式

属性树数据集没有类型,也不支持数组。因此,使用以下JSON /属性树映射:

JSON objects are mapped to nodes. Each property is a child node.

  • Json对象是映射到节点集上,每个数显是子节点

JSON arrays are mapped to nodes. Each element is a child node with an empty name. If a node has both named and unnamed child nodes, it cannot be mapped to a JSON representation.

JSON数组被映射到节点。每个元素都是一个带有空名称的子节点。如果一个节点具有命名和未命名的子节点,则不能将其映射到JSON表示。

JSON values are mapped to nodes containing the value. However, all type information is lost; numbers, as well as the literals "null", "true" and "false" are simply mapped to their string form.

JSON值映射到包含值的节点。但是,所有类型信息都丢失了;数字,以及文字“空”、“真”和“假”都被简单地映射到它们的字符串形式。

Property tree nodes containing both child nodes and data cannot be mapped.

无法映射同时包含子节点和数据的属性树节点

这个json树:

  1. {
  2. "menu":
  3. {
  4. "foo": true,
  5. "bar": "true",
  6. "value": 102.3E+06,
  7. "popup":
  8. [
  9. {"value": "New", "onclick": "CreateNewDoc()"},
  10. {"value": "Open", "onclick": "OpenDoc()"},
  11. ]
  12. }
  13. }

被映射为:

  1. menu
  2. {
  3. foo true
  4. bar true
  5. value 102.3E+06
  6. popup
  7. {
  8. ""
  9. {
  10. value New
  11. onclick CreateNewDoc()
  12. }
  13. ""
  14. {
  15. value Open
  16. onclick OpenDoc()
  17. }
  18. }
  19. }

这个是一个属性树

INI Parser

INI格式曾经在Windows世界中被广泛使用。它现在已被弃用,但仍然被大量的应用程序使用。原因可能是它的简单性,加上Microsoft推荐使用注册表作为替代,而不是所有的开发人员都想这么做。

INI是一个简单的键值格式,只有一个层次的切片。因此,它不像属性树数据集那样丰富,这意味着不是所有的属性树都可以被序列化为INI文件。

INI解析器为每个部分创建一个树节点,以及该部分中每个属性的子节点。所有的属性都不会直接添加到根节点。空的部分将被忽略。(如下面所述,他们不会往返。)

INI serializer反转这个过程。它首先写出包含数据的根的每个子节点,但是没有子节点作为属性。然后,它为每个包含子节点的子节点创建一个部分,但是没有数据。各部分的子元素只能包含数据。如果根节点包含数据,或者根的任何子节点包含数据和内容,或者有超过三层的层次结构,那么它就是一个错误。也不能有任何重复的键。

一个空的树节点被假定为一个空的属性。没有办法创建空的部分。

由于Windows INI解析器丢弃了尾随空格,并且不支持引用,因此属性树解析器遵循了这个示例。这意味着包含尾随空格的属性值不会往返。无法映射包含子节点和数据的属性树节点。

来一个wiki上的例子:

  1. ; last modified 1 April 2001 by John Doe
  2. [owner]
  3. name=John Doe
  4. organization=Acme Products
  5. [database]
  6. server=192.0.2.42 ; use IP address in case network name resolution is not working
  7. port=143
  8. file="acme payroll.dat"

这个ini文件的数据结构是没有xml强的,也没有json好用,是一个十足的弱得一笔的配置文件,连微软自己都建议开发者使用注册表,不要再使用这个ini文件了

INFO Parser

信息格式是专门为属性树库创建的。它提供了一种简单、高效的格式,可以用来序列化那些只存储在内存中的属性树。它也可以用于任何其他目的,尽管缺乏广泛的用途,但是,它确实是一种高效的结构

INFO提供了一些特性,这些特性使c++程序员更熟悉,对于中型数据集(尤其是用于测试输入的数据集)来说,这是非常有效的。它支持c样式的字符转义,通过花括号进行嵌套,

并通过#include文件包含,这是一个非常重要的功能,可以直接把文件模块化

INFO还用于在此文档中显示属性树

INFO的格式:

  1. key1 value1
  2. key2
  3. {
  4. key3 value3
  5. {
  6. key4 "value4 with spaces"
  7. }
  8. key5 value5
  9. }

下面是一个复杂的INFO格式:

  1. ; A comment
  2. key1 value1 ; Another comment
  3. key2 "value with special characters in it {};#\n\t\"\0"
  4. {
  5. subkey "value split "\
  6. "over three"\
  7. "lines"
  8. {
  9. a_key_without_value ""
  10. "a key with special characters in it {};#\n\t\"\0" ""
  11. "" value ; Empty key with a value
  12. "" "" ; Empty key with empty value!
  13. }
  14. }
  15. #include "file.info" ; included file

信息往返,除了损失的评论和包括指令。

包含文件的功能,还需要再三看看看

null

原文地址:https://www.cnblogs.com/xujintao/p/8325938.html

时间: 2024-10-09 08:53:07

如何填充属性树?的相关文章

Index的填充属性:FillFactor 和 PAD_INDEX

在Create Index时,必须慎重考虑属性FillFactor 和 PAD_INDEX的设置,这两个属性只在create index 或 rebuild index时起作用,表示Index page(Leaf-Level 或 intermediate-Level)的填充程度.如果设置FillFactor=90,那么SQL Server 在create index 或 rebuild index时,不是将Index Page的空间全部用完,而是只使用接近90%的Page空间,预留10%的空闲空

属性树的简介

该库的中心组件是basic_ptree类模板.该类的实例是属性树. 对 key 和 data_type进行参数化; 总之,就是,模版编程那一套 ptree, wptree, iptree和wiptree都是basic_ptree的typedef,使用预定义的模板参数组合 核心,就是:basic_ptree 属性树基本上是一个稍微简化的标准容器(最接近std::list),加上一堆额外的成员函数.这些函数允许方便和有效地访问存储在属性树中的数据.它们是get.put.get_value.put_v

Spring IOC 容器源码分析 - 填充属性到 bean 原始对象

1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反射创建一个原始的 bean 对象,然后再向这个原始的 bean 对象中填充属性.对于填充属性这个过程,简单点来说,JavaBean 的每个属性通常都有 getter/setter 方法,我们可以直接调用 setter 方法将属性值设置进去.当然,这样做还是太简单了,填充属性的过程中还有许多事情要做.

padding填充属性

内边距属性: 设置元素的内容与边框之间的距离. 分4个方向(上右下左): padding-top padding-right padding-bottom padding-left 说明:值不能为负值. 盒子在网页中占的空间,不单单与width和height属性有关, 还与padding有关. 原文地址:https://www.cnblogs.com/hugegege/p/9457806.html

bean的创建(五)第五部分 属性填充

AbstractAutowireCapableBeanFactory.populateBean protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) { //获取属性值 PropertyValues pvs = mbd.getPropertyValues(); if (bw == null) { if (!pvs.isEmpty()) { throw new BeanCreatio

#8.10.16总结# 属性选择符 伪对象选择符 CSS的常用样式

属性选择符 E[att] E[att="val"] E[att~="val"] E[att^="val"] E[att$="val"] E[att*="val"] E[att|="val"] 伪对象选择符  E:first-letter/E::first-letter 设置对象内的第一个字符的样式. <p>今天,阳光明媚,晴空万里,非常适合户外活动,如踏青.远足之类的.长期坐

索引优化之:创建、填充和查找

在做性能优化时,经常需要创建索引,维护索引,或重建,或重组:在创建索引时,索引的数据页有时需要填充满,有时需要预留一定比例的空闲空间:在分析查询的执行计划之后,推荐创建覆盖索引(covering index),优化查询语句,使用执行计划通过Index Seek来获取少量数据等,这些都是索引优化不得不知的要点. 一,索引的重组(Reorganize)和重建(Rebuild) 在SQL Server中,索引(Index)是B-Tree(balance tree)结构,每个Page之间都有双向指针链接

Day49:CSS属性操作(文本、背景、边框、列表、display、边距)

一.CSS属性操作 1.CSS text 文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如:  red p { color: rebeccapurple; } 水平对齐方式 text-align 属性规定元素中的文本的水平对齐方式. left       把文本排列到左边.默认值:由浏览器决定. right     把文本排列到右边. center 把文

SpringMVC类型转换器、属性编辑器

对于MVC框架,参数绑定一直觉得是很神奇很方便的一个东西,在参数绑定的过程中利用了属性编辑器.类型转换器 参数绑定流程 参数绑定:把请求中的数据,转化成指定类型的对象,交给处理请求的方法 请求进入到DisptacherServlet,卸下请求中的数据 DisptacherServlet将请求中的数据发送给Controller 获取Controller需要接收的参数类型,将参数类型和请求数据发送给DataBinder DataBinder将参数类型和请求数据再发给TypeConverter,由Ty