c#加载xml属性_从XML加载属性

1.5之前的J2SE版本要求您直接使用XML解析器来加载配置文件和存储设置。 尽管这从来都不是一件容易的事,并且解析器是平台的标准组成部分,但是额外的工作还是有些烦人。 现在,新更新的java.util.Properties类为加载和存储程序设置提供了一种更简便的方法: loadFromXML(InputStream is)storeToXML(OutputStream os, String comment)方法。

属性基础

如果您不熟悉java.util.Properties类,可以使用它在文件中存储一组键-值对,其中键和值由等号分隔,如清单1所示。

清单1.属性样本集
foo=bar
fu=baz

如果清单1已加载到Properties对象中,那么您将找到两个键( foofu )和两个值( bar表示foobaz表示fu )。 该类支持将\u嵌入Unicode字符串,但是重要的是,所有内容都被视为String

清单2显示了如何加载属性文件并列出其当前的键和值集。 您只需将文件的InputStream传递给load()方法,然后将每个键值对添加到Properties实例。 然后,您可以使用list()列出所有属性,或者使用getProperty()检索单个属性。

清单2.加载属性
import java.util.*;
import java.io.*;

public class LoadSample {
  public static void main(String args[]) throws Exception {
    Properties prop = new Properties();
    FileInputStream fis = 
      new FileInputStream("sample.properties");
    prop.load(fis);
    prop.list(System.out);
    System.out.println("\nThe foo property: " +
        prop.getProperty("foo"));
  }
}

运行LoadSample程序将产生清单3的输出。请注意, list()方法的输出不会按输入文件中的顺序生成键值对列表。 Properties类将对的集合存储在哈希表中(实际上,它是Hashtable子类),因此不保证顺序。

清单3. LoadSample的输出
-- listing properties --
fu=baz
foo=bar

The foo property: bar

XML属性文件

这些都不是新手。 这是Properties类始终起作用的方式。 但是,新功能是可以从XML文件加载一组属性的选项。 清单4显示了它的DTD。

清单4. DTD属性






如果您不喜欢阅读XML DTD,这实际上是说包装在外部标记中的是标记,后跟任意数量的标记。 对于每个标签,都有一个key属性,条目的内容为其值。 清单5显示了清单1中的属性文件的XML版本。

清单5.属性文件的XML版本



Hi
bar
baz

如清单6所示,读取Properties文件的XML版本与读取旧样式格式没有太大区别。

清单6.读取XML属性文件
import java.util.*;
import java.io.*;

public class LoadSampleXML {
  public static void main(String args[]) throws Exception {
    Properties prop = new Properties();
    FileInputStream fis =
      new FileInputStream("sampleprops.xml");
    prop.loadFromXML(fis);
    prop.list(System.out);
    System.out.println("\nThe foo property: " +
        prop.getProperty("foo"));
  }
}

运行清单6中的程序会产生与原始程序相同的输出,如清单2所示。

保存XML属性

新“ Properties功能的另一面是将属性存储到XML格式的文件中。 尽管store()方法仍将创建清单1所示的文件,但是您现在可以使用新的storeToXML()方法创建清单5所示的文件。 只需传递一个OutputStream和一个String作为注释,就可以完成。 清单7演示了新的storeToXML()方法。

清单7.将属性存储为XML文件
import java.util.*;
import java.io.*;

public class StoreXML {
  public static void main(String args[]) throws Exception {
    Properties prop = new Properties();
    prop.setProperty("one-two", "buckle my shoe");
    prop.setProperty("three-four", "shut the door");
    prop.setProperty("five-six", "pick up sticks");
    prop.setProperty("seven-eight", "lay them straight");
    prop.setProperty("nine-ten", "a big, fat hen");
    FileOutputStream fos =
      new FileOutputStream("rhyme.xml");
    prop.storeToXML(fos, "Rhyme");
    fos.close();
  }
}

清单8显示了运行清单7中的程序所产生的输出。

清单8.存储的XML文件



Rhyme
lay them straight
pick up sticks
a big, fat hen
shut the door
buckle my shoe

结论

使用XML文件还是使用较旧样式的a = b类型文件完全取决于您。 从内存角度来看,较旧的样式肯定是较轻的重量。 但是,对于XML的普遍性,人们希望XML格式会流行,因为它已经被广泛使用,而不仅仅是通过Properties对象。 选择完全取决于您。 检查程序包专用XMLUtils类的源,以获取有关使用的XML解析的其他信息。


翻译自: https://www.ibm.com/developerworks/java/library/j-tiger02254/index.html

你可能感兴趣的:(java,python,xml,编程语言,linux)