Разбор http вернул XML с Java - PullRequest
1 голос
/ 01 марта 2011

Итак, я попытался найти и найти, как это сделать, но я продолжаю видеть много сложных ответов на то, что мне нужно.Я в основном использую API Flurry Analytics для возврата некоторого XML-кода из HTTP-запроса, и это то, что он возвращает.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<eventMetrics type="Event" startDate="2011-2-28" eventName="Tip Calculated" endDate="2011-3-1" version="1.0" generatedDate="3/1/11 11:32 AM">
<day uniqueUsers="1" totalSessions="24" totalCount="3" date="2011-02-28"/>
<day uniqueUsers="0" totalSessions="0" totalCount="0" date="2011-03-01"/>
<parameters/>
</eventMetrics>

Все, что я хочу получить, это тот номер totalCount, который равен 3 с Java для intили строка.Я посмотрел на различные методы DOM и SAX, и они, кажется, собирают информацию вне тегов.Могу ли я просто взять totalCount внутри тега?

Спасибо,

Обновление

Я нашел этот URL - http://www.androidpeople.com/android-xml-parsing-tutorial-%E2%80%93-using-domparser/

Это помогло мне, учитывая, что это было в Android.Но я благодарю всех, кто откликнулся на помощь мне.Я проверил каждый ответ, и он немного помог мне понять, что происходит.Тем не менее, теперь я не могу получить xml из моего URL, потому что сначала требуется HTTP-сообщение, чтобы потом получить xml.Когда он пытается получить xml из моего URL, он просто говорит, что файл не найден.

Обновление 2

Я все разобрался, прочитав его сейчас и получив xmlот Flurry Analytics (для справки, если кто-то наткнется на этот вопрос)

HTTP-запрос для XML-файла

Ответы [ 5 ]

4 голосов
/ 01 марта 2011

Если вы используете обработчик SAX, переопределите метод обратного вызова startElement для доступа к атрибутам:

public void startElement (String uri, String name, String qName, Attributes atts)
{
    if("day".equals (qName)) {
      String total = attrs.getValue("totalCount");
    }
}
4 голосов
/ 01 марта 2011

totalCount - это то, что мы называем атрибутом. Если вы используете org.w3c.dom API, вы вызываете getAttribute ("totalCount") для соответствующего элемента.

2 голосов
/ 01 марта 2011

Пример JDOM. Обратите внимание на использование SAXBuilder для загрузки документа.

URL httpSource = new URL("some url string");
Document document = SAXBuilder.build(httpSource);
List<?> elements = document.getDescendants(new KeyFilter());

for (Element e : elements) {
  //do something more useful with it than this
  String total = (Element) e.getAttributeValue("totalCount");
}

class KeyFilter implements Filter {
  public boolean matches (Object obj) {
    return (Element) obj.getName().equals("key");
  }
}
1 голос
/ 02 февраля 2012

Ваш ответ можно найти здесь: HTTP-запрос для файла XML

Надеюсь, эта ссылка поможет, так как у меня была такая же проблема.

0 голосов
/ 02 марта 2011

Я думаю, что самый простой способ - использовать XPath, ниже приведен пример, основанный на vtd-xml.

  import com.ximpleware.*; 
    public class test {
        public static void main(String[] args) throws Exception {
            String xpathExpr = "/eventMetrics/day/@totalCount";
            VTDGen vg = new VTDGen();
            int i = -1;

            if (vg.parseHttpUrl("http://localhost/test.xml", true)) {
                VTDNav vn = vg.getNav();
                AutoPilot ap = new AutoPilot();
                ap.selectXPath(xpathExpr);
                ap.bind(vn);
                System.out.println("total count "+(int)ap.evalXPathtoDouble());
                    }
        }
    }
...