Проблема использования XPath для разбора данных XML-строки - PullRequest
3 голосов
/ 11 августа 2011

Я пытаюсь использовать XPath для анализа строки XML, но я получаю только нулевые значения. У кого-нибудь есть идея, где я могу ошибаться в коде, показанном ниже?

public static void main(String[] args) {
    String content = "<imagesXML><Images><Image><ImageUID Scope='Public' Type='Guid' Value='{7f2535d0-9a41-4997-9694-0a4de569e6d9}'/><CorbisID Scope='Public' Type='String' Value='42-15534232'/><Title Scope='Public' Type='String' Value='Animal'/><CreditLine Scope='Public' Type='String' Value='© Robert Llewellyn/Corbis'/><IsRoyaltyFree Scope='Public' Type='Boolean' Value='False'/><AspectRatio Scope='Public' Type='String' Value='1.500000'/><URL128 Scope='Public' Type='String' Value='http://cachens.corbis.com/CorbisImage/thumb/15/53/42/15534232/42-15534232.jpg'/></Image></Images></imagesXML>";
    InputSource source = new InputSource(new StringReader(content));
    XPath xPath = XPathFactory.newInstance().newXPath();
    NodeList list = null;
    try {
        list = (NodeList) xPath.evaluate("//URL128[@Value]", source,
                XPathConstants.NODESET);
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
    for (int i = 0; i < list.getLength(); i++) {
        System.out.println(list.item(i));
    }
}

Вывод из System.out: 'value = [URL128: null]', но это должен быть URL, который я пытаюсь извлечь: http://cachens.corbis.com/CorbisImage/thumb/15/53/42/15534232/42-15534232.jpg.

Любая помощь приветствуется, спасибо.

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Что если вы попытаетесь изменить свой оператор оценки XPath с этого:

list = (NodeList)xPath.evaluate("//URL128[@Value]", 
    source, XPathConstants.NODESET);

к этому:

list = (NodeList) xPath.evaluate("//URL128/@Value", 
    source, XPathConstants.NODESET);
1 голос
/ 11 августа 2011

Примечание:

  • Выражение //URL128[@Value] возвращает список всех URL123 элементов, имеющих атрибут Value
  • Выражение //URL128/@Value возвращает списокValue атрибутов от каждого URL128 элемента в источнике

Ни один из этих списков не содержит строк;они содержат типы DOM.У вас есть только один элемент URL128 в вашем источнике, но вы запрашиваете NodeList.Вы можете упростить, используя следующее:

String url = xPath.evaluate("//URL128/@Value", source);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...