/ / Как да извлечете url изображение от персонализиран XML файл? - xml

Как да извлечете URL адреса на изображението от персонализиран XML файл? - xml

Имам множество XML файлове, които съдържат връзка към публикациите и изображенията в следната маркировка:

<url>
<loc>http://sample.com/sample-post</loc>
<lastmod>2015-12-27T16:42:07-01:00</lastmod>
<image:image>
<image:loc>http://sample.com/1234/5678.jpg</image:loc>
<image:title><![CDATA[tag1,tag2]]></image:title>
</image:image>
<image:image>
<image:loc>http://sample.com/1234/5678.jpg</image:loc>
<image:caption><![CDATA[tag1,tag2]]></image:caption>
</image:image>
</url>

Искам да извлечем връзките към изображенията и да премахна дубликатите, но няма href атрибут, така че мога да използвам jQuery, за да ги закачам и извличам. Има ли някакъв начин да направите това с тази маркировка? всяка помощ ще бъде оценена.

P.S: има много отговори по интернет за този въпрос, но както споменах, XML ми липсва href атрибут.

Отговори:

0 за отговор № 1

Може да искате да използвате SAX парсер от Java от линк, който дадох.

Тук е основен скелет за да започнеш.
Той извлича два URL адреса от вашите XML.
Скелетът отпечатва неща, така че да знаете какви функции получават.

package xmlparse;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class xmlparse {

public static void main(String[] args) throws ParserConfigurationException,
SAXException, IOException {

File inputFile = new File("images.xml");

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

saxParser.parse(inputFile, new MySAXHandler());
}
}

class MySAXHandler extends DefaultHandler {
String currentQName = "";
List<String> imageLocList = new ArrayList<>();

@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {

System.out.println("startElement got: uri: " + uri);
System.out.println("startElement got localName: " + uri);
System.out.println("startElement got Name: " + qName);
System.out.println("startElement got attributes: " + attributes);
System.out.println();

this.currentQName = qName;
}


@Override
public void characters (char ch[], int start, int length) {
String s = new String(ch).substring(start, start+length).trim();
System.out.format("  Received characters (s=%d, length=%s): %s%n",
start, length, s);

/* ** Your handling should go here ** */
if (currentQName.equals("image:loc")) {
imageLocList.add(s);
}
}

@Override
public void endElement(String uri, String localName, String qName) {
System.out.println("endElement got: uri: " + uri);
System.out.println("endElement got localName: " + uri);
System.out.println("endElement got qName: " + qName);
System.out.println();

this.currentQName = "";
}

@Override
public void endDocument() {
System.out.println("Document ended. Listing URLs:");
imageLocList.forEach(System.out::println);
}
}