Как получить значение элемента из строки, используя DOM? - PullRequest
0 голосов
/ 06 июля 2018

У меня есть следующий код, написанный на Java:

public class XMLParser {

public static void main(String arg[]) throws Exception {
    String message = "<add>\n" +
            "  <doc>\n" +
            "    ......................
            "    <field name=\"imageWidth\" update=\"set\">400</field><field name=\"imageHeight\" update=\"set\">400</field>\n" +
            "    <field name=\"internalImageUrl\" update=\"set\">https://google.com</field>\n" +
            "  </doc>\n" +
            "</add>";

    String s = getUrlValue(message);

    System.out.println(s);
}

private static String getUrlValue(String message) throws ParserConfigurationException, IOException, SAXException, XPathExpressionException {
    String urlValue = null;
    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(message));

    Document doc = db.parse(is);
    NodeList nodes = doc.getElementsByTagName("doc");

    for (int i = 0; i < nodes.getLength(); i++) {
        Element element = (Element) nodes.item(i);

        NodeList name = element.getElementsByTagName("field");
        Element line = (Element) name.item(23);
        urlValue = line.getTextContent();
    }

    return urlValue;
}

}

Как мне получить значение этого атрибута:

field name=\"internalImageUrl\" update=\"set\">https://google.com</field>

Мне нужно получитьссылка -> "https://google.com" с использованием "internalImageUrl" параметра

В моем решении я использовал:

Element line = (Element) name.item(23);

, но мне нужно использовать цикл для всех элементов с именем "field" и найти только "internalImageUrl"

1 Ответ

0 голосов
/ 06 июля 2018

xPath может сделать это проще, выражение: //field[name='internalImageUrl']

В Dom4j мы можем использовать приведенный ниже код, чтобы получить все узлы, которые удовлетворяют вашим требованиям

  List list = doc.selectNodes("//field[name='internalImageUrl']");  
  Iterator it = list.iterator();  
  while (it.hasNext()) {  

  }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...