Java 读取具有多个子节点的xml文件
假设我有一个XML文件,如下面的XML文件Java 读取具有多个子节点的xml文件,java,xml,solr,xml-parsing,Java,Xml,Solr,Xml Parsing,假设我有一个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<
<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>
div[class=name],attr=0
span[class=(?i)(新价格|旧价格)],属性=0
div[class=(?i)(sttl dyn | bin)],attr=0
div[class=image]>a>img,attr=src
div[class=name]>a,attr=href
img[class=img],attr=alt
div[class=g-b],attr=0
div[class=(?i)(sttl dyn | bin)],attr=0
img[itemprop=image],attr=src
a[class=img],attr=href
我想要的是首先获取所有的值,在完成第一个操作后,转到下一个并重复它,即使我有两个以上的标记。如果只有一个可用,我已经设法获取。使用标签中的值,我正在执行一些其他功能。在每种情况下,它都有不同的值,我将这些值用于不同的操作。如果一切正常,除了我不知道如何在xml文件中循环抓取之外
关于如果我理解正确,那么您正试图从XML片段中存在的所有标记中提取数据。有多种解决方案。我将它们列在下面:
// 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()");
// 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
}
}
//实例化文档生成器
DocumentBuilder xmlDocBuilder=domFactory.newDocumentBuilder();
文档xmlDoc=xmlDocBuilder.parse(“xmlFile.xml”);
//创建元素标记“爬网”的节点列表
NodeList crawlingnodelist=xmlDoc.getElementsByTagName(“爬网”);
//现在迭代节点列表中的每个项,并获取
//名称、价格、描述等中的每个元素。
用于(节点:爬网节点列表){
NamedNodeMap子NodeMap=node.getChildNodes();
int currentNodeMapLength=subNodeMap.getLength();
//获取每个节点的名称和值
对于(i=0;我必须查看JAXB api示例-到目前为止您做了什么?您遇到了什么问题?向我们展示您需要帮助的地方。我正在获取值并对网站进行爬网。因此,我在xml标记中获得了用于爬网的HTML属性。当我使用多个url时,我希望使用多个HTML属性对ryt进行爬网?所以我想自动化它。现在我正在做的是使用不同的xml文件,并手动更改程序中的xml文件名以进行爬网。我想将所有站点的html属性设置为单个xml文件,并逐个读取。您的第二个解决方案(编号为1。顺便说一句),什么是类的domFactory?