Можно ли с помощью MOXy и XPath разобрать список атрибутов?

Изменить: вот как я загружаю XML-документ, как я использовал его в ответе Блейза. Я загружаю его так, потому что хочу работать с узлом, а не со всем документом. Даже используя весь документ, у меня все еще возникают проблемы с загрузкой таким образом.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("[path to doc]/input.xml");
TestClass testClass = (TestClass) unmarshaller.unmarshal(doc);

У меня есть XML, который выглядит так:

<test>
  <items>
    <item type="cookie">cookie</item>
    <item type="crackers">crackers</item>
  </items>
</test>

И класс:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test")
public class TestClass
{
  @XmlPath("items/item/text()")
  @XmlElement
  private ArrayList<String> itemList = new ArrayList<String>();

  // getters, setters omitted
}

Приведенный выше код будет работать независимо от того, есть ли у меня @XmlElement, и я получаю ArrayList, содержащий [cookie, взломщики].

Если я изменю объявление выше на

@XmlPath("items/item/@type")
@XmlElement
private ArrayList<String> itemList = new ArrayList<String>();

мой ArrayList пуст.

Моя конечная цель - просто иметь атрибуты, чтобы мой XML выглядел так:

<test>
  <items>
    <item type="cookie"/>
    <item type="crackers"/>
  </items>
</test>

Возможно ли то, что я пытаюсь сделать, вывести список атрибутов с помощью XPath, и если да, то как?

Спасибо.


person Paul    schedule 02.08.2011    source источник


Ответы (1)


person    schedule
comment
Ваш пример работает так, как показано, но когда я объединил его с тем, как я загрузил документ (см. редактирование, которое я внес в свой вопрос), то мой вывод таков: 2.3.0.v20110604-r9504 <?xml version="1.0" encoding="UTF-8"?> <test/> В конечном итоге мне нужно работать с узлом - как я должен загрузить документ так что я могу вытащить узел и запустить его через Moxy/JAXB? - person Paul; 03.08.2011
comment
Я провел еще немного тестов, пытаясь извлечь как значение, так и атрибут из каждого элемента. Я могу получить значение, но не атрибут. - person Paul; 03.08.2011
comment
Последний тест... если я добавлю атрибут к элементам, <items type="blarg">, я смогу получить его без проблем, например. @XmlPath("items/@type"), только не от item. - person Paul; 03.08.2011
comment
@Paul - я смог подтвердить проблему, которую вы видите, и обновил свой ответ, указав обходной путь. - person bdoughan; 03.08.2011
comment
спасибо, что нашли время, чтобы посмотреть на это и придумать обходной путь. Я использую MOXy в качестве поставщика JAXB. Одна только функция xpath сэкономила мне столько времени! - person Paul; 03.08.2011
comment
@Paul - Нет проблем, мы рады помочь. Завтра вы сможете получить ночную загрузку нашего потока 2.3.1 с этим исправлением (eclipse.org/eclipselink/downloads/nightly.php). Также вы видели, что нового в XmlPath в версии 2.3 (blog.bdoughan.com/2011/03/)? - person bdoughan; 03.08.2011