我有一个XML文件如下
<abc>
<property>
<Recentlyopenedfiles>
<File Path="c:\hai.txt" />
<File Path="C:\old.java" />
</Recentlyopenedfiles>
</property>
</abc>
我使用jdom2 SAXBuilder来解析java中的xml。我需要保存<Recentlyopenedfiles>
中所有最近打开的文件。最多只需要保存三条路径(即)3最近打开的文件路径。
所以,我需要知道
感谢。
答案 0 :(得分:4)
Jon的回答与我的建议最接近。它的mecahinics比它听起来更容易:
Document doc = saxbuilder.build(....);
Element abc = doc.getRootElement();
Element recentelement = abc.getChild("properties").getChild("Recentlyopenedfiles");
List<Element> recentfiles = recentelement.getChildren("File");
recentfiles.add(0, new Element("File").setAttribute("Path", filepath));
while (recentfiles.size() > 3) {
recentfiles.remove(3);
}
XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat());
xout.output(doc, outputstream);
答案 1 :(得分:2)
XSD中有声明限制子元素的数量,但我不认为这与您的特定情况相关。在解析然后修改XML时,您只需要手动执行限制。
就“堆叠”而言 - 如果您只是总是将项目添加到元素的开始而不是最后(使用parent.addContent(0, newChild)
),那么您最终会得到你添加的最后一个是文档中的第一个。然后你可以计算你有多少,并删除任何额外的。
答案 2 :(得分:0)
答案 3 :(得分:0)
设置子节点的限制。假设您没有创建解析的XML,可以定义模式中的子元素数(XSD)
类似的东西:
<xs:element name="pets">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="dog" type="xs:string"/>
<xs:element name="cat" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果您然后添加代码中的元素,那么只需将它们添加到顶部: 如描述here
,使用带有index = 0的addContentelem.addContent(0, newChild);