Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java允许嵌套属性吗?_Java_Xml_Properties_Nested - Fatal编程技术网

java允许嵌套属性吗?

java允许嵌套属性吗?,java,xml,properties,nested,Java,Xml,Properties,Nested,我指的是xml格式的类似内容: <entry name="apple"> <property name="red" /> <property name="shiny" /> <property name="fresh" /> <property name="ripe" /> <property name="crunchy" /> </entry> <entry nam

我指的是xml格式的类似内容:

<entry name="apple">
    <property name="red" />
    <property name="shiny" />
    <property name="fresh" />
    <property name="ripe" />
    <property name="crunchy" />
</entry>
<entry name="plum">
    < rinse and repeat > ....

<冲洗并重复>。。。。

根据我对java的“Property”类的了解,它是在哈希表中创建属性的一种非常线性的方法。它是getProp(K,V)。也许最好的方法是使用XML解析器?这样我就可以使对象类型为“fruit”,遍历属性并加载它们。如有任何建议,将不胜感激。先谢谢你

不,这是不可能的。请看一下:



但是,您可以创建自己的DTD和XML文档,并使用来解析/读取/创建它。

不可能允许嵌套属性。要嵌套属性,需要有子节点。如果getProperty方法允许检索
对象
s,但它只允许检索
字符串
s,那么这是可以实现的

Java的Properties对象的工作原理如下:

性质 -串 -串 -串

因此,除非可以通过字符串传递嵌套属性,否则不能将一个属性放置在另一个属性中

也许您可以使用
字符串
s通过类似于

我的意思是:

Properties a;
HashTable<String, Properties> b;

Object getValue(Properties p, String key){
    String s = p.getProperty(key);
    if(s.beginsWith("prop:")){
        return b.get(s);
    } else
        return s;
}
属性a;
哈希表b;
对象getValue(属性p,字符串键){
字符串s=p.getProperty(键);
如果(s.beginsWith(“道具:”){
返回b.get(s);
}否则
返回s;
}

您可能需要在代码库中处理该场景。您可能需要一个XML加载器来加载数据


“java允许嵌套属性吗?”鉴于java的XML解析器符合规范,更好的问题是“XML允许…”。我也有同样的问题,但考虑到现在允许检索泛型,它会改变您的答案吗?
Properties a;
HashTable<String, Properties> b;

Object getValue(Properties p, String key){
    String s = p.getProperty(key);
    if(s.beginsWith("prop:")){
        return b.get(s);
    } else
        return s;
}