簡體   English   中英

java DOM XML解析器內部元素

[英]java DOM XML Parser Inner Element

我能夠通過使用XML DOM解析器來解析xml的主要元素,例如我可以獲取getElementsByTagName(“ id”)或getElementsByTagName(“ stock_number”),依此類推,但是我遇到了一個問題在標記中,我只需要返回的信息。

我在feed.xml文件中有一個XML,如下所示:

<inventory>
    <item UnitID="1234" Record="0">
        <id>1234</id>
        <dealerid>455</dealerid>
        <stock_number>1600Xtreme</stock_number>
        <make>Nvidia</make>
        <noteshtml>This is some random info about the product1234.<br><br> 
         Buy with trust from a LQZ dealership.<br><br> Contact&nbsp;Dave at 
         Burnaby location - 604 123 4578.<br>
        </noteshtml>
        <images>
            <Image1 image="1" UnitID="1234">
                https://anydomain.com/photo54.jpg
            </Image1>
            <Image2 image="2" UnitID="1234">
                https://anydomain.com/photo22.jpg
            </Image2>
            <Image3 image="3" UnitID="1234">
                https://anydomain.com/photo32.jpg
            </Image3>
        </images>
    </item>
    <item UnitID="7854" Record="1">
        <id>7854</id>
        <dealerid>587</dealerid>
        <stock_number>12TMAX5500</stock_number>
        <make>Realtek</make>
        <noteshtml>This is some random info about the product 7854.<br><br> 
        Buy with trust from a LQZ dealership.<br><br> Contact&nbsp;Dave at 
        Burnaby location - 604 123 4578.<br>
        </noteshtml>
        <images>
            <Image1 image="1" UnitID="7854">
                https://anydomain.com/photo656.jpg
            </Image1>
            <Image2 image="2" UnitID="7854">
                https://anydomain.com/photo6565.jpg
            </Image2>
            <Image3 image="3" UnitID="7854">
                https://anydomain.com/photo908.jpg
            </Image3>
        </images>
    </item>
</inventory>

這通常是到目前為止我得到的Java代碼:

File fXmlFile=new File("feed.xml");
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList=doc.getElementsByTagName("item");
for (int temp=0; temp < nList.getLength(); temp++)
{
    Node nNode=nList.item(temp);
    Element eElement2=(Element)nNode;
    int search=1234;
    System.out.println("This is the value to search from my variable: " + search);
    int toTest=Integer.parseInt(eElement2.getAttribute("UnitID"));
    System.out.println("toTest is equal to: " + toTest);
    if (toTest == search)
    {
        System.out.println("stock Number: " + eElement2.getElementsByTagName("stock_number").item(0).getTextContent());
    }
}

我的問題是如何現在進入images標簽,並僅打印該image = 1標識符的url。

我已經搜索了很多東西,並研究了如何使用DOM解析器,我嘗試通過創建Node的subElement來嘗試,但出現錯誤。 感謝您的回答。

要在images標簽中獲取子元素 ,您不能直接在images標簽中調用getChildNodes,因為還有一些其他節點,請參閱java xml cast Node to Element 因此,嘗試通過getElementsByTagName直接獲取孩子。

File fXmlFile=new File("feed.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("item");
for (int temp = 0; temp < nList.getLength(); temp++) {
    Node nNode = nList.item(temp);
    Element eElement2 = (Element) nNode;
    int search = 1234;
    System.out.println("This is the value to search from my variable: " + search);
    int toTest = Integer.parseInt(eElement2.getAttribute("UnitID"));
    System.out.println("toTest is equal to: " + toTest);
    if (toTest == search) {
        System.out.println(
                "stock Number: " + eElement2.getElementsByTagName("stock_number").item(0).getTextContent());
        Element images = (Element) eElement2.getElementsByTagName("images").item(0);
        Element image1Node = (Element) images.getElementsByTagName("Image1").item(0);
        Element image2Node = (Element) images.getElementsByTagName("Image2").item(0);
        Element image3Node = (Element) images.getElementsByTagName("Image3").item(0);
        if (image1Node.getAttribute("image").equals("1")) {
            System.out.println("image1Node id attribute is 1");
        }
        if (image2Node.getAttribute("image").equals("1")) {
            System.out.println("image2Node id attribute is 1");
        }
        if (image3Node.getAttribute("image").equals("1")) {
            System.out.println("image3Node id attribute is 1");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM