2016-11-03 20 views
0

私は、次のマークアップでの記事や画像へのリンクが含まれているXMLファイルの束を持っている:イメージURLをカスタム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

どのような言語ですか。これはSAXとJavaを使用して簡単に行うことができます。ここをクリックhttps://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html –

+0

言語は関係ありません。それは私がそれをコンパイルすることができる限り、多くのライブラリを含めることなく、C++であることさえできます。 –

+0

その後、Javaを実行します。 SAXは含まれているため、インポートする必要はありません。 APIは非常に簡単です –

答えて

0

link I gaveからJavaのSAXパーサーを使用することができます。

ここには基本骨格があります。
XMLから2つのURLを抽出します。
スケルトンは何を受け取っているかを知るために何かを印刷します。

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); 
    } 
} 
関連する問題