У меня есть модель, которая находится в формате XML, как показано ниже, и мне нужно проанализировать XML и проверить, установлен ли флаг XML internal-flag
как истинный или нет. В моих других моделях возможно, что флаг internal-flag
установлен как false. И иногда также возможно, что этого поля не будет, поэтому по умолчанию он будет ложным из моего кода.Как извлечь одно логическое поле из XML?
<?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
установить, как верно или нет?
// 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?
}
Как ваш bean-компонент заполняется из XML? Как вы получаете все остальные поля (например, «имя»)? – Thilo
@Thilo, на данный момент я ничего не делаю с XML. В моем классе ModelMetadata есть переменная, называемая 'modelValue' - эта переменная хранит мой XML в строковом формате, так как это означает, что мне нужно использовать' String modelValue = model.getModelValue(); 'для выполнения XML разбор. – john
Для параметров анализа XML см. Это http://stackoverflow.com/questions/23509480/how-to-extract-values-from-below-xml-code-using-java?rq=1 – Thilo