我在工作的方法來過濾與XML文件的集合(文件清單)如果一個特定的XML標記有一個屬性...JAXB檢查XML的標記具有特定屬性
詳細.. 。我想過濾所有的xml文件,其中的xml標籤有一個屬性「is_special」,但我有問題來設置我的模型類的屬性。
在我要保存文件的名稱和它的項目,其中的值具有屬性is_special =「真」
而且我使用與莫西擴展JAXB框架列表末尾...
的XML的結構如下:
<document>
<id>75C8866AB078DCE541256D16002CF636</id>
<size>806220</size>
<author>xxx</author>
<last_modified>2017.06.12 07:15:41 GMT</last_modified>
<added_to_file>2016.07.05 09:50:44 GMT</added_to_file>
<created>2003.04.28 08:11:06 GMT</created>
<items>
<item>
<name>someName/name>
<type>LNITEMTYPE_DATETIMES</type>
<values>
<value is_special="true"/>
</values>
<last_modified>2003.04.28 08:11:10 GMT</last_modified>
...
</item>
<item>
<name>someName/name>
<type>LNITEMTYPE_TEXT</type>
<values>
<value>SOMETEXT</value>
<value>SOMETEXT</value>
</values>
<last_modified>2003.04.28 08:11:10 GMT</last_modified>
...
</item>
</items>
爲此我有3類,針對XML的文件...
「XMLDocument.java」 實現 「Items.java」 它實現了 「Value.java」
XMLDocument.java名單列表
@XmlRootElement(name = "notes_document")
public class XMLDocument {
...
private List<Item> items;
...
@XmlElementWrapper(name = "items")
@XmlElement(name = "item")
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}
item.java
@XmlRootElement(name = "items")
public class Item {
private String name;
private List<String> values;
private boolean valueIsSpecial;
@XmlElement(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElementWrapper(name = "values")
@XmlElement(name = "value")
public List<String> getValues() {
return values;
}
public void setValues(List<String> values) {
this.values = values;
}
@XmlPath("value/@is_special")
public boolean getValueIsSpecial() {
return valueIsSpecial;
}
public void setValueIsSpecial(boolean valueIsSpecial) {
this.valueIsSpecial = valueIsSpecial;
}
}
value.java
@XmlRootElement(name = "values")
public class Value {
@XmlElement(name = "value")
private String itemValue;
@XmlPath("value/@is_special")
private boolean isSpecial;
public String getValue() {
return itemValue;
}
public void setValue(String value) {
this.itemValue = value;
}
public boolean getValueIsSpecial() {
return isSpecial;
}
public void setValueIsSpecial(boolean isSpecial) {
this.isSpecial = isSpecial;
}
}
我的方法到目前爲止...
public void FilterTree_isSpecial() throws JAXBException, FileNotFoundException {
for(String file: FileList) {
if (file.endsWith(".xml") && !file.contains("databaseinfo.xml")) {
JAXBContext context = JAXBContext.newInstance(NotesDocumentMetaFile.class);
Unmarshaller um = context.createUnmarshaller();
NotesDocumentMetaFile docMetaFile = (XMLDocument) um.unmarshal(new FileReader(file));
for (int i = 0; i < docMetaFile.getItems().size(); i++) {
// CHECK IF THE <value> OF THIS ITEM HAS ATTRIBUTE is_special
}
}
}
}
許多文字...我希望任何人都可以給我一個解決方案:/
XML中存在錯誤。你應該關閉第一個「價值」標籤。 –
[編輯]其自己關閉...感謝提示 –
這可以很容易地由java的xpath完成,你需要Jaxb的一些其他目的嗎? – SomeDude