Java все дочерние элементы чтения в XML - PullRequest
0 голосов
/ 20 декабря 2011

Я хочу прочитать все ссылки и заголовки одновременно в список массивов?

<rootNode>
    <image>
        <link>http://imagelink/</link>
        <title>This is the title</title>
    </image>
    <movie>
        <link>http://movielink/</link>
        <title>This is the title</title>
    </movie>
</rootNode>

Код ниже работает нормально, но там, где есть разные дочерние узлы, он может сделать код слишком большим.

Я не хочу множественного числа, я хочу что-то, что выглядит чисто!

    ArrayList XTimeStamp = new ArrayList();
    Node libraryTagNode, libraryDataNode;
    Element libraryTagElement, libraryDataElement;
    NodeList libraryTagList,libraryDataList;

    try {
        File file = new File("computer.txt");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(file);
        doc.getDocumentElement().normalize();

        NodeList imageLst = doc.getElementsByTagName("image");
        NodeList movieLst = doc.getElementsByTagName("movie");  

        for (int s = 0; s < imageLst.getLength(); s++) {
            libraryTagNode=bookLst.item(s);


            if (libraryTagNode.getNodeType() == Node.ELEMENT_NODE) {

                libraryTagElement = (Element) libraryTagNode;

                libraryTagList = libraryTagElement.getElementsByTagName("link");
                libraryDataElement = (Element) libraryTagList.item(0);

                libraryDataList = libraryDataElement.getChildNodes();
                String timeStampX=libraryDataList.item(0).getNodeValue();

                libraryTagList = libraryTagElement.getElementsByTagName("title");
                libraryDataElement = (Element) libraryTagList.item(0);

                libraryDataList = libraryDataElement.getChildNodes();
                String timeStampY=libraryDataList.item(0).getNodeValue();

                XTimeStamp.add(timeStampX+" "+timeStampY);

            }

        }
    for (int s = 0; s < movieLst.getLength(); s++) {
            libraryTagNode=bookLst.item(s);


            if (libraryTagNode.getNodeType() == Node.ELEMENT_NODE) {

                libraryTagElement = (Element) libraryTagNode;

                libraryTagList = libraryTagElement.getElementsByTagName("link");
                libraryDataElement = (Element) libraryTagList.item(0);

                libraryDataList = libraryDataElement.getChildNodes();
                String timeStampX=libraryDataList.item(0).getNodeValue();

                libraryTagList = libraryTagElement.getElementsByTagName("title");
                libraryDataElement = (Element) libraryTagList.item(0);

                libraryDataList = libraryDataElement.getChildNodes();
                String timeStampY=libraryDataList.item(0).getNodeValue();

                XTimeStamp.add(timeStampX+" "+timeStampY);

            }

        }

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

Не на 100% уверен в том, что вы спрашиваете, но если вы хотите получить все узлы ссылки в NodeList и все узлы заголовка в другом списке узлов, вы можете попробовать XPath , используя "// link" и "// title" как ваше выражение XPath

0 голосов
/ 20 декабря 2011

Полагаю, вы хотите как-то свернуть две петли в одну, поскольку это, безусловно, громоздкий способ сделать это, как сейчас.

Ответ - использовать XPath. Я бы посоветовал вам поискать элементы <title>, в которых parent содержится элемент <link>.

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