2015-04-20 2 views
0

я следующий XMLXStream: только разборе дочерний элемент

<root> 
<child-1> 
</child-1> 
<child-2> 
    <subchild-21> 
    </subchild-22> 
</child-2> 
</root> 

Мое требование таково, что я только хочу, чтобы разобрать ребенок-2. Я не знаю, как root и child-1.

Возможно ли это с помощью xstream, потому что я не мог найти способ игнорировать root.

ответ

1

Существует несколько способов, в зависимости от ваших требований.

Если вы знаете имя класса для синтаксического анализа (здесь здесь находится ребенок-2), вы можете искать запись в формате XML <child-2> и </child-2> в XML, скопировать их вместе с промежуточным контентом в новый временный XML-файл (вы можете создавать временные файлы с помощью createTempFile() из стандартного класса File). Так я предлагаю.

Если вы хотите вынуть экземпляр child-2 без знания его имени, но вы знаете имена окружающих классов, вы можете издеваться над их классами, которые создают классы с тем же именем, но без их конкретного содержимого , В вашем примере нет содержимого (возможно, оно игнорировалось во время экспорта), но важно иметь одинаковые данные элемента в классах макета для успешного импорта. (если вы не используете ignoreUnknownElements(), как указано Philipi Willemann)

Конечно, если вы создаете XML, вы должны иметь возможность экспортировать только экземпляр child-2 в первую очередь.

0

Если вы знаете имя корня можно создать простой класс имеет атрибут класса вы отображенный на child-2:

@XStreamAlias("root") 
class Root { 
    @XStreamAlias("child-2") 
    private Child2 child; 

    //get and set 
} 

Затем, когда вы обработка XML вы можете установить XStream игнорировать неизвестные элементов с xstream.ignoreUnknownElements();