我们有一个 xml 解析器(用 Java 实现)来解析 xml 文档,如下所示。
现在我们要在 xml-parser 中添加功能,它允许用户从命令行覆盖 xml 文件中的值,即系统属性(-D 属性)。不需要以任何方式准备 xml 文件。
应该可以使用如下语法提供 -D 属性:
-Dxml.id0001=host:22.33.44.55,ports:6000;6001
XML文件:
<resources>
<resource id="id001">
<property name="host">123.234.34.56</property>
<property name="ports">7000;7001</property>
</resource>
<resource id="id002">
<property name="host">987.876.765.54</property>
</resource>
</resources>
问题:-D 属性中应该使用哪些分隔符,以避免对 xml 文档中的数据施加约束?例如在上面的例子中 7000;7001 包含“;” 在它的价值,所以不能用它作为分隔符。我希望 xml 数据能够包含独立于 -D 属性的语法的任何数据。
这会是更好的语法吗:
-Dxml.id0001=<host>22.33.44.55<ports>6000;6001
因为 XML 的文本值中不允许使用“小于/大于”字符。
另外:是否有任何现有的解析器库可以帮助解决这个问题?我搜索但找不到一个。
未来的语法会越来越先进,
-Dxml.*=<host>22.33.44.55<ports>6000;6001 // change host/port for any resource
-Dxml.*=<host<135.246.357.468>>22.33.44.55 // change host only for resources that has host=135.246.357.468
等等等等