2016-08-09 2 views
0

Я преобразовал файлы XSD в объекты JAVA с помощью JAXB.JAXB узлы поиска и удаления узлов

Следующее, что я сделал, это unmarshall xml-файл для этих объектов.

Теперь моя цель - добавить, удалить, найти некоторые узлы в XML.

Мне очень сложно это сделать в JAXB.

например, например, я хочу совместить любой узел с атрибутом name = "weight".

Как это сделать в объектах JAXB?

В dom XML этот поиск/обновление/удаление очень прост.

Как я могу сделать это в JAXB?

или, например,

У меня есть имя атрибута, чтобы соответствовать «Вес», который имеет тип InterfaceClass.

<CAEXFile> 
<InterfaceCLASSLIB> 
<interfaceclass> 
<attribute name="weight> 
<../> 

Так, чтобы получить доступ к классу интерфейса.

Мне нужно будет пройти через все иерархии объектов.

CAEXFile ---> get InterfaceClassLib() ---> getInterfaceClass() -> gettAttributes();

Обратите внимание, что каждый метод get возвращает список массивов, потому что может быть много классов интерфейса, атрибутов e.t.c.

Это очень дорогой метод.

Я не нашел предопределенной функции для достижения определенного узла.

Любая помощь будет оценена по достоинству. Должен повернуть обратно DOM-XML для xml вставить удаление.

ответ

1

Как вы сказали, поиск узлов с использованием JAXB является дорогостоящим. Я бы использовал XPathFactory, доступный как часть стандартной Java, чтобы получить нужные узлы. Как показано ниже:

public static void main(String[] args) throws Exception 
{ 
    XPathFactory xpf = XPathFactory.newInstance(); 
    XPath xpath = xpf.newXPath(); 

    InputSource xml = new InputSource("<your_path_to_input.xml>"); 
    Object result = (Object) xpath.evaluate("//attribute[@name=\"weight\"]", xml, XPathConstants.NODESET); 
    if (result != null && result instanceof NodeList) 
    { 
     NodeList nodeList = (NodeList)result; 
     if (nodeList.getLength() > 0) 
     { 
     for (int i = 0; i < nodeList.getLength(); i++) 
     { 
      org.w3c.dom.Node node = nodeList.item(i); 
      System.out.println(node.getNodeValue()); 
     } 
     } 
    } 
} 

XPath является //attribute[@name="weight"], он рекурсивно ищет XML для attribute узлов, которые имеют атрибут name со значением weight

Смежные вопросы