java - 如何从 XML 中提取一个 boolean 字段?

标签 java xml parsing

我有一个 XML 格式的模型,如下所示,我需要解析 XML 并检查我的 XML 是否将 internal-flag 标志设置为 true 。在我的其他模型中,internal-flag 标志可能设置为 false。有时,该字段也可能不存在,因此默认情况下,我的代码中该字段将为 false。

<?xml version="1.0"?>
<ClientMetadata
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.google.com client.xsd" 
 xmlns="http://www.google.com"> 
    <client id="200" version="13">
        <name>hello world</name>
        <description>hello hello</description>
        <organization>TESTER</organization>
        <author>david</author>
        <internal-flag>true</internal-flag>
        <clock>
            <clock>
                <for>
                    <init>val(tmp1) = 1</init>
                    <clock>
                        <eval><![CDATA[result("," + $convert(val(tmp1)))]]></eval>
                    </clock>
                </for>
                <for>
                    <incr>val(tmp1) -= 1</incr>
                    <clock>
                        <eval><![CDATA[result("," + $convert(val(tmp1)))]]></eval>
                    </clock>
                </for>
            </clock>
        </clock>
    </client>
</ClientMetadata>

我有一个 POJO,其中存储了我的上述模型 -

public class ModelMetadata {

    private int modelId;
    private String modelValue; // this string will have my above XML data as string

    // setters and getters here

}

现在确定我的模型是否将 internal-flag 设置为 true 的最佳方法是什么?

// this list will have all my Models stored
List<ModelMetadata> metadata = getModelMetadata();

for (ModelMetadata model : metadata) {
    // my model will be stored in below variable in XML format
    String modelValue = model.getModelValue();

    // now parse modelValue variable and extract `internal-flag` field property
}

我是否需要使用 XML 解析来实现此目的,或者是否有更好的方法来实现此目的?

更新:-

我已经开始使用 Stax,这是我到目前为止所尝试过的,但不确定如何提取该字段 -

InputStream is = new ByteArrayInputStream(modelValue.getBytes());

XMLStreamReader r = XMLInputFactory.newInstance().createXMLStreamReader(is);
while(r.hasNext()) {
    // now what should I do here?
}

最佳答案

有一个简单的解决方案,使用 XMLBeam (披露:我隶属于该项目),只需几行:

public class ReadBoolean {
    public interface ClientMetaData {
        @XBRead("//xbdefaultns:internal-flag")
        boolean hasFlag();
    }
    public static void main(String[] args) throws IOException {
      ClientMetaData clientMetaData = new XBProjector().io().url("res://xmlWithBoolean.xml").read(ClientMetaData.class);      
      System.out.println("Has flag:"+clientMetaData.hasFlag());
    }
}

这个程序打印出来

Has flag:true

用于您的 XML。

关于java - 如何从 XML 中提取一个 boolean 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791905/

相关文章:

c# - 忽略 XML 序列化中的属性

c++ - boost::未排序模式的精神语法

json - Scala 发送 GET 请求,无法解析 json 响应

java - for循环这是什么意思?

Java:如何为每个 RecyclerView 项目制作自己的总数计数器?

xml - 使用 `&lt;` 而不是简单的 `<` 在 XSLT 中进行比较有什么大不了的?

android - 从 JSONArray 转换为 ArrayList<CustomObject> - Android

java - 映射条目出现在 HashMap.entrySet() 中,但不在内部 HashMap.table 中

java - 长时间作业时如何防止结冰

java - JAXB 绑定(bind) XML 模式的当前 URL 是什么?