2016-03-02 2 views
0

У меня ситуация здесь, где мне нужно разобрать следующий XML:разборе XML с двумя же дочерними узлами

<Attributes> 
    <Map> 
     <entry key="band" value="25" /> 
     <entry key="triggerSnapshots"> 
      <value> 
       <Map> 
        <entry key="AttributeChange"> 
         <value> 
          <Attributes> 
           <Map> 
            <entry key="band" value="45" /> 
           </Map> 
          </Attributes> 
         </value> 
        </entry> 
        <entry key="ManagerTransfer" value="7262079" /> 
        <entry key="needsCreateProcessing"> 
         <value> 
          <Boolean>true</Boolean> 
         </value> 
        </entry> 
       </Map> 
      </value> 
     </entry> 
    </Map> 
</Attributes> 

Вопросы:

  1. В приведенных выше XML мне нужен пикап значение для ключа ввода band=25, а не band=45 ключ ввода. Когда я анализирую мой XML с помощью:

    NodeList nodes = doc.getElementsByTagName("entry");

я сначала получить значение диапазона, как 25 и сохранить его на карте, а затем, когда я получаю значение диапазона, как 45 значение диапазона 25 на карте получает перезаписаны 45. Мне нужно только разобрать xml таким образом, чтобы получить значение диапазона как 25, а не как 45.

+0

, если XML не большой, то я рекомендую XPath parser..in который вам может поместить весь путь, как XPath xpath = XPathFactory.newInstance(). newXPath(); map = (String) xpath.evaluate ("/ Attributes/Map/entry/value/Map", doc, XPathConstants.STRING); –

+0

Есть ли предел для этого гнездования? –

ответ

0

Вы можете просто положить doc.getElementsByTagName("entry").item(0) , так как это получит первый элемент, который является «записью». Но это не лучший способ.

Может быть лучше, чтобы посмотреть на XPath и получить конкретные узлы XML и значения, которые вы хотите xpath.compile("/Attributes/Map/entry")

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder; 
builder = factory.newDocumentBuilder(); 
InputSource input = new InputSource(new StringReader(xmlString)); 
org.w3c.dom.Document doc = builder.parse(input); 
XPath xpath = XPathFactory.newInstance().newXPath(); 
javax.xml.xpath.XPathExpression expr= xpath.compile("/Attributes/Map/entry[@key='band']/@value"); 
System.out.println(expr.evaluate(doc, XPathConstants.STRING)); 

More on XPath here

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