Как получать элементы того же имени XML?

Я нуждаюсь в том, чтобы получить attributo url всех элементов <media:content/> XML, сходного с этим.

<rss version='2.0' xmlns:media='http://search.yahoo.com/mrss/'>
    <channel>
        <item>
            <media:group>
                <media:content url='https://valor'/>
            </media:group>
        </item>
        <item>
            <media:group>
                <media:content url='https://valor'/>
            </media:group>
        </item>    
    </channel>
</rss>

Это метод, который пробовал бы, но contents.getLength() возврати нуль.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(inputStream);
NodeList contents = doc.getElementsByTagNameNS("http://search.yahoo.com/mrss/", "content");

Я попробовал использовать XPath... снова contents.getLength() возврати нуль.

XPathFactory factory2 = XPathFactory.newInstance();
XPath xpath = factory2.newXPath();
// XPathExpression expr = xpath.compile("//content"); 
XPathExpression expr = xpath.compile("//*[name()='content']");
NodeList contents = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

Никогда я не получаю необходимые узлы: какая-то подсказка?

1
задан 01.04.2016, 21:28
3 ответа

Чтобы работать с ними mГ©todos ..NS, когда поверит DOM, ты должен призывать в mГ©todo factory.setNamespaceAware(true);

2
ответ дан 24.11.2019, 14:39

Чтобы получать стоимость признака (в этом случае url), имея один .rss формы:

<rss version='2.0' xmlns:media='http://search.yahoo.com/mrss/'>
    <channel>
        <item>
            <media:group>
                <media:content url='https://www.stackoverflow.com'/>
            </media:group>
        </item>
        <item>
            <media:group>
                <media:content url='https://www.cnn.com'/>
            </media:group>
        </item>
    </channel>
</rss>

могут соглашаться на элементы получая список узлов и соглашаясь на Вашу стоимость:

import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.SAXException;
    ...
    ...

      InputStream inputStream =  url.openStream();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(inputStream);

        NodeList contents = doc.getElementsByTagName("item");

            for (int i = 0; i < contents.getLength(); ++i)
            {
                Element elemA = (Element) contents.item(i);
                NodeList valueListB = elemA.getElementsByTagName("media:group");
                for (int j = 0; j < valueListB.getLength(); ++j) {
                    Element elemB = (Element) valueListB.item(j);
                    NodeList valueListC = elemB.getElementsByTagName("media:content");
                    for (int k = 0; k < valueListC.getLength(); ++k)
                    {
                        Element elemC = (Element) valueListC.item(k);
                       System.out.println("url: " + elemC.getAttribute("url"));
                    }
                }
            }

Или возможно идти прямо в элемент, в этом случае" media:content" и получать стоимость Вашего признака" url":

 try {
    URL   url = new URL(feedUrl);
    InputStream inputStream =  url.openStream();
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(inputStream);

        NodeList contents = doc.getElementsByTagName("media:content");
        for (int i = 0; i < contents.getLength(); ++i) {
            Element elemA = (Element) contents.item(i);
            System.out.println("url: " + elemA.getAttribute("url"));
        }

    } catch (IOException e) {
       System.out.println(e.getMessage());
    } catch (ParserConfigurationException e) {
        System.out.println(e.getMessage());
    }catch (SAXException e) {
        System.out.println(e.getMessage());
    }

obtendrГ - в стоимость:

url: https://www.stackoverflow.com
url: https://www.cnn.com

introducir la descripción de la imagen aquí

0
ответ дан 24.11.2019, 14:39
  • 1
    Спасибо за ответ! но оно не функционирует, уже он протестировал что-то похожее и также не функционировал, он не берет элементы, если ты они просишь туз и # 237; elemA.getElementsByTagName (" media:group"), префикс не идет ах и # 237; кроме того префикс может изменять другому один XML. – rnrneverdies 01.04.2016, 23:00
  • 2
    Конечно я использую getElementByTagNameNS так как content эту в namespace. И я это чувствую, но оно не функционирует. – rnrneverdies 01.04.2016, 23:23
  • 3
    кроме того не необходимо переходить с одного сайта на другой dom таким образом, итак, getElementByTagName приносит все элементы документа, если impotar уровень, где они находятся, прием состоит в том, чтобы устанавливать setNamespaceAware (true), сосредоточись на ответе martin. – rnrneverdies 01.04.2016, 23:24
  • 4
    Это, но предполагается этот сайт, чтобы давать выборы в конце концов. Тогда это не функционирует и не может получать признак url? – Jorgesys♦ 01.04.2016, 23:26
  • 5
    не с этим м и # 233; все. – rnrneverdies 01.04.2016, 23:27

XML:

0OK30-1-0000013-66271741VisaGoldBs50007000-200011/01/201511/01/2020ASCACamacho30-1-0000013-6111122222VisaGold$us40002000200011/03/201411/01/2019ASCAEl Крыть

Черепицей JAVA: Ты читаешь XML: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance (); DocumentBuilder db = null; String messageError = null; Integer codResp =-1; String msjResp =""; try { db = dbf.newDocumentBuilder (); InputSource is = new InputSource (); is.setCharacterStream (new StringReader (xmlresponse)); try { Document document = db.parse (is); NodeList codigoRespuesta = document .getElementsByTagName ("CodigoRespuesta"); NodeList mensajeRespuesta = document .getElementsByTagName ("MensajeRespuesta");

            for (int i = 0; i < codigoRespuesta.getLength(); i++) {
                String codRespuesta = codigoRespuesta.item(i)
                        .getTextContent();
                codResp = Integer.parseInt(codRespuesta);
                msjResp = mensajeRespuesta.item(i).getTextContent();
            }
        } catch (SAXException e) {
            e.printStackTrace();
            if (logger.isDebugEnabled())
                logger.logDebug(messageError);
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            if (logger.isDebugEnabled())
                logger.logDebug(messageError);
            return null;
        }
    } catch (ParserConfigurationException e1) {
        // handle ParserConfigurationException
        e1.printStackTrace();
        if (logger.isDebugEnabled())
            logger.logDebug(messageError);
        return null;
    }

Больших мешков данные: try { db = dbf.newDocumentBuilder (); InputSource is = new InputSource (); is.setCharacterStream (new StringReader (xmlresponse)); try { Document document = db.parse (is);

            // NodeList listDatos =
            // doc.getElementsByTagName("DatosTarjeta");
            // for (int i = 0; i < listDatos.getLength(); i++) {
            //
            // NodeList hijos = listDatos.item(i).getChildNodes();
            // for (int j = 0; j < hijos.getLength(); j++) {
            // logger.logDebug("Datos " + i + " : "
            // + hijos.item(j).getNodeName() + ": "
            // + hijos.item(j).getTextContent());
            // }
            //
            // }

            NodeList list = document.getElementsByTagName("DatosTarjeta");
            for (int i = 0; i < list.getLength(); i++) {

                NodeList elements = list.item(i).getChildNodes();

                logger.logDebug("Datos " + i + " : "
                        + list.item(i).getTextContent());

//СОВСЕМ Здесь ты повторяешь, где ты хотел, чтобы он вышел } } catch (SAXException e) { e.printStackTrace (); if (logger.isDebugEnabled ()) logger.logDebug (messageError); return null; } catch (IOException e) { e.printStackTrace (); if (logger.isDebugEnabled ()) logger.logDebug (messageError); return null; } } catch (ParserConfigurationException e1) { e1.printStackTrace (); if (logger.isDebugEnabled ()) logger.logDebug (messageError); return null; }

Ждал подайте тебя slds...

-2
ответ дан 24.11.2019, 14:39
  • 1
    Porfavor издает твой ответ читабельной формы и объясняет то, что делает этот c и # 243; я говорю, схвати и # 237; помогать и # 225; s м и # 225; в. – NaCl 29.05.2016, 05:35

Теги

Похожие вопросы