JAXB 检查 XML-Tag 是否具有特定属性
JAXB check if XML-Tag has specific attribute
我正在使用一种方法来过滤 xml 文件的集合 (FileList),如果特定的 xml- 标签具有属性...
详细...我想过滤所有xml-文件,其中xml-标签具有属性"is_special",但我在设置模型时遇到问题- 类 属性。
最后我想存储文件名及其项目列表,其中值具有属性 is_special="true"
我还使用带有 Moxy 扩展的 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
}
}
}
}
很多文字...希望有大佬能给我解答:/
实际上 Item.java
中的 xpath 需要是:values/value/@is_special
就像 @XmlPath("values/value/@is_special")
如果您想要 Value.java
中的 is_special
,您的 xpath 也应该是:
@is_special
赞:@XmlPath(@is_special)
你的Item.java
、Value.java
也需要一点改变。您不需要 @XmlRootElement
,您的 XmlDocument.java
中已经有了
您的 Item.java
应该是:
public class Item
{
private String name;
private String type;
private String lastModified;
private List<Value> values;
private String isSpecial;
@XmlPath("values/value/@is_special")
public String getIsSpecial() {
return isSpecial;
}
public void setIsSpecial(String isSpecial) {
this.isSpecial = isSpecial;
}
@XmlElement(name="type")
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@XmlElement(name="last_modified")
public String getLastModified() {
return lastModified;
}
public void setLastModified(String lastModified) {
this.lastModified = lastModified;
}
@XmlElement(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElementWrapper(name="values")
@XmlElement(name="value")
public List<Value> getValues() {
return values;
}
public void setValues(List<Value> values) {
this.values = values;
}
}
您的 Value.java
应该是:
public class Value
{
@XmlPath("text()")
private String value;
@XmlPath("@is_special")
private String isSpecial;
public String getIsSpecial() {
return isSpecial;
}
public void setIsSpecial(String isSpecial) {
this.isSpecial = isSpecial;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
请注意,要在 Value.java
中获得 value
和 is_special
,您可以使用 @XmlPath
.
现在您可以在 Item.java
上调用 getIsSpecial()
来检查它是否特殊。
我正在使用一种方法来过滤 xml 文件的集合 (FileList),如果特定的 xml- 标签具有属性...
详细...我想过滤所有xml-文件,其中xml-标签具有属性"is_special",但我在设置模型时遇到问题- 类 属性。
最后我想存储文件名及其项目列表,其中值具有属性 is_special="true"
我还使用带有 Moxy 扩展的 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
}
}
}
}
很多文字...希望有大佬能给我解答:/
实际上 Item.java
中的 xpath 需要是:values/value/@is_special
就像 @XmlPath("values/value/@is_special")
如果您想要 Value.java
中的 is_special
,您的 xpath 也应该是:
@is_special
赞:@XmlPath(@is_special)
你的Item.java
、Value.java
也需要一点改变。您不需要 @XmlRootElement
,您的 XmlDocument.java
您的 Item.java
应该是:
public class Item
{
private String name;
private String type;
private String lastModified;
private List<Value> values;
private String isSpecial;
@XmlPath("values/value/@is_special")
public String getIsSpecial() {
return isSpecial;
}
public void setIsSpecial(String isSpecial) {
this.isSpecial = isSpecial;
}
@XmlElement(name="type")
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@XmlElement(name="last_modified")
public String getLastModified() {
return lastModified;
}
public void setLastModified(String lastModified) {
this.lastModified = lastModified;
}
@XmlElement(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElementWrapper(name="values")
@XmlElement(name="value")
public List<Value> getValues() {
return values;
}
public void setValues(List<Value> values) {
this.values = values;
}
}
您的 Value.java
应该是:
public class Value
{
@XmlPath("text()")
private String value;
@XmlPath("@is_special")
private String isSpecial;
public String getIsSpecial() {
return isSpecial;
}
public void setIsSpecial(String isSpecial) {
this.isSpecial = isSpecial;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
请注意,要在 Value.java
中获得 value
和 is_special
,您可以使用 @XmlPath
.
现在您可以在 Item.java
上调用 getIsSpecial()
来检查它是否特殊。