gpt4 book ai didi

java - 读取具有多个子节点的xml文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:54 27 4
gpt4 key购买 nike

假设我有一个像下面的 xml 文件一样的 XML 文件。

<top>
<CRAWL>
<NAME>div[class=name],attr=0</NAME>
<PRICE>span[class~=(?i)(price-new|price-old)],attr=0</PRICE>
<DESC>div[class~=(?i)(sttl dyn|bin)],attr=0</DESC>
<PROD_IMG>div[class=image]>a>img,attr=src</PROD_IMG>
<URL>div[class=name]>a,attr=href</URL>
</CRAWL>
<CRAWL>
<NAME>img[class=img],attr=alt</NAME>
<PRICE>div[class=g-b],attr=0</PRICE>
<DESC>div[class~=(?i)(sttl dyn|bin)],attr=0</DESC>
<PROD_IMG>img[itemprop=image],attr=src</PROD_IMG>
<URL>a[class=img],attr=href</URL>
</CRAWL>
</top>

我想要的是首先获取下面的所有值,完成第一个操作后转到下一个操作并重复它,即使我有两个以上的标签。我已经设法知道是否只有一个可用。使用标签内的值我正在执行一些其他功能。每个它都有不同的值,我将这些值用于不同的操作。除了我不知道如何在 xml 文件内循环获取之外,其他一切都很好。

问候

最佳答案

如果我理解正确的话,您正在尝试从 XML 片段中存在的所有标记中提取数据。对此有多种解决方案。我将它们列出如下:

  1. XPath:如果您确切知道 XML 结构是什么,则可以对每个节点使用 XPath=CRAWL 来查找标签内的数据:

    // Instantiate XPath variable
    XPath xpath = XPathFactory.newInstance().newXPath();
    // Define the exact XPath expressions you want to get data for:
    XPathExpression name = xpath.compile("//top/CRAWL/NAME/text()");
    XPathExpression price = xpath.compile("//top/CRAWL/PRICE/text()");
    XPathExpression desc = xpath.compile("//top/CRAWL/DESC/text()");
    XPathExpression prod_img = xpath.compile("//top/CRAWL/PROD_IMG/text()");
    XPathExpression url = xpath.compile("//top/CRAWL/URL/text()");

此时,上面的每个变量都将包含每个标签的数据。您可以将其放入每个数组中,其中您将拥有所有元素中每个标签的所有数据。

  1. 另一种(更有效的解决方案)是通过基于 DOM 的解析来存储数据:

    // Instantiate the doc builder
    DocumentBuilder xmlDocBuilder = domFactory.newDocumentBuilder();
    Document xmlDoc = xmlDocBuilder.parse("xmlFile.xml");
    // Create NodeList of element tag "CRAWL"
    NodeList crawlNodeList = xmlDoc.getElementsByTagName("CRAWL");
    // Now iterate through each item in the NodeList and get the values of
    // each of the elements in Name, Price, Desc etc.
    for (Node node: crawlNodeList) {
    NamedNodeMap subNodeMap = node.getChildNodes();
    int currentNodeMapLength = subNodeMap.getLength();

    // Get each node's name and value
    for (i=0; i<currentNodeMapLength; i++){
    // Iterate through all of the values in the nodeList,
    // e.g. NAME, PRICE, DESC, etc.
    // Do something with these values
    }
    }

希望这有帮助!

关于java - 读取具有多个子节点的xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372000/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com