2013-03-20 3 views
1

У меня есть способ распечатать только содержимое между XML-тегом открытия и закрытия. Я знаю, что мой счетчик глубины XML - проблема, но я не могу понять, куда ее поместить/исправить. Вот XML.Поиск закрывающего тега XML

<XMS> 
    <Object> 
     <Property> 
      <Value>1</Value> 
     </Property> 
    </Object> 
</XMS> 

Вот код Java ...

Boolean flag = false; 

    while(reader.hasNext()) { 
     eventType = reader.next(); 

     if(getEventType(eventType) == "START_ELEMENT" 
       && reader.getLocalName() == startTagName){ 
      flag = true; 
      depth++; 
      System.out.println(reader.getLocalName() + " Depth = " + depth); 
     } 
     else if(getEventType(eventType) == "END_ELEMENT" 
       && flag == true 
       && (depth == 0)){ 
      depth--; 
      System.out.println(reader.getLocalName() + " Depth = " + depth + " BIG END"); 
      break; 
     } 
     else if(getEventType(eventType) == "START_ELEMENT" 
       && flag == true){ 
      depth++; 
      System.out.println(reader.getLocalName() + " Depth = " + depth); 
     } 
     else if(getEventType(eventType)== "END_ELEMENT" 
       && flag == true){ 
      depth--; 
      System.out.println(reader.getLocalName() + " Depth = " + depth + " END"); 
     } 
    } 
} 

GetEventType просто возвращает правильный типСобытия (работает должным образом). И вот выход из консоли.

Object Depth = 1 
Property Depth = 2 
Value Depth = 3 
Value Depth = 2 END 
Property Depth = 1 END 
Object Depth = 0 END 
XMS Depth = -1 BIG END 

Проблема заключается в том, что он должен заканчиваться на последнем объекте, когда depth = 0, и останавливается, прежде чем перейти на XMS depth = -1. Любой совет?

+0

Вы нашли свой тент? –

ответ

0

EventType - это int не строка, вы сравниваете ее с неправильными значениями. Кроме того, вы не сравниваете строки в java, используя ==, вы используете equals(). Кроме того, флаг должен быть boolean (примитив).

как будущая записка, когда вы сталкиваетесь с такими проблемами, научитесь запускать свой код в отладчике, чтобы найти свои логические проблемы, а не публиковать на SO.

+0

Прошу прощения, я забыл упомянуть, что у меня есть метод, который преобразует int в строку для сравнения (getEventType (eventType)). Мне нужно исправить == vs. equals(), но если это не работает, это не даст мне никакого вывода. –

+0

Всегда сравнивайте строки с '.equals()' –

1

может ли быть так же просто, как сравнивать, если глубина равна единице вместо нуля?

, когда вы в элементе «Object», глубину == 1, поэтому, когда вы сталкиваетесь окончание «Объект» тег, вы должны быть проверки

... && (depth == 1) 
0

В коде

else if(getEventType(eventType) == "END_ELEMENT" 
        && flag == true 
        && (depth == 0)){ 
       depth--; 
//rest of your code 

Ваше условие: (depth == 0) как одно из условий и в вашем методе тела вы делаете depth--;. Разве эта глубина не уменьшилась бы до -1?

Мой вопрос: вам действительно нужно сделать depth--;, если у вас есть if (depth == 0)?

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