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 version="1.0" encoding="UTF-8"?>
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED>

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

清单5.属性文件的XML版本
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Hi</comment>
<entry key="foo">bar</entry>
<entry key="fu">baz</entry>
</properties>

如清单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文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Rhyme</comment>
<entry key="seven-eight">lay them straight</entry>
<entry key="five-six">pick up sticks</entry>
<entry key="nine-ten">a big, fat hen</entry>
<entry key="three-four">shut the door</entry>
<entry key="one-two">buckle my shoe</entry>
</properties>

结论

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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值