нет. XML содержит реальные данные. Мне нужно преобразовать его в массив php (к сожалению, это должен быть PHP: / не спрашивайте, почему ...).
---> Вы можете использовать фабрику для создания пустого человека или узла биографии, а затем передать его или проверить с помощью DTD
"Бин" не проблема ... Построить список бинов сложнее, чем я думал .. возможно, основная проблема связана с решением, так как я хочу сделать его как можно более общим ..
вот код Java, который я только что написал, может быть, у вас есть идея ..
public List<PersonBean> extract(String xml) throws Exception {
InputSource is =new InputSource(new StringReader(xml));
XPathFactory xfactory = XPathFactory.newInstance();
XPath xpath = xfactory.newXPath();
NodeList nodeList = (NodeList)xpath.evaluate("/root/person", is, XPathConstants.NODESET);
int length = nodeList.getLength();
int pos = -1;
Traverser tra = new Traverser();
Attribute nameAttr = new Attribute();
nameAttr.setName("attr");
while(++pos < length) {
PersonBean bean = new PersonBean();
Node person = nodeList.item(pos);
Node fore = tra.getElementByNodeName(person, "id");
nameAttr.setValue("forename");
Node pre = tra.getElementByNodeNameWithAttribute(person,"name",nameAttr);
nameAttr.setValue("surname");
Node sur = tra.getElementByNodeNameWithAttribute(person, "name", nameAttr);
bean.setForeName(pre.getTextContent());
bean.setSurName(sur.getTextContent());
bean.setId(fore.getTextContent());
Node bio = tra.getElementByNodeName(person, "biography");
Node bid = tra.getElementByNodeName(bio, "id");
Node url = tra.getElementByNodeName(bio, "url");
BiographyBean bioBean = new BiographyBean();
bioBean.setId(bid.getTextContent());
bioBean.setUrl(url.getTextContent());
bean.setBio(bioBean);
persons.add(bean);
}
return persons;
}
Traverser - это простой итеративный xml traverser.
Атрибут другого компонента для значения и имени.
Это решение отлично работает, учитывая случай, когда существует "person" -узел. Однако код может резко возрасти для всех других элементов, которые необходимо проанализировать ..
Я не ожидаю готовых решений, просто небольшой намек в правильном направлении ..:)
Приветствия
Mike