簡體   English   中英

使用 Java 讀取遠程 XML 文件的標簽值

[英]Read Tag value of Remote XML file using Java

我正在嘗試讀取存儲在遠程位置的 XML 文件並打印“最新”標簽的該值。 目前我能夠打印整個 XML 文件的內容,但我只想打印“最新”標簽的值,即 3.6.8 。我不明白在構建包中使用哪個來讀取 XML 文件..請幫忙

XML 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <metadata>
    <groupId>com.avocent.commonplatform.cps.symbols</groupId>
    <artifactId>MasterData</artifactId>
    <versioning>
    <latest>3.6.8</latest>
    <release>3.6.8</release>
    <versions>
    <version>1.0.19</version>
    <version>1.0.27</version>
    <version>1.0.29</version>
    <version>1.0.30</version>
    <version>1.0.32</version>
    <version>1.0.33</version>
    <version>1.0.35</version>
    <version>2.0.1</version>
    <version>2.0.3</version>
    <version>2.0.4</version>
    <version>2.0.5</version>
    <version>2.0.6</version>
    <version>2.0.7</version>
    <version>3.0.1</version>
    <version>3.0.2</version>
    <version>3.0.3</version>
    <version>3.0.4</version>
    <version>3.0.5</version>
    <version>3.0.6</version>
    <version>3.0.7</version>
    <version>3.0.9</version>
    <version>3.0.10</version>
    <version>3.0.11</version>
    <version>3.0.13</version>
    <version>3.4.0</version>
    <version>3.5.0</version>
    <version>3.5.1</version>
    <version>3.5.2</version>
    <version>3.5.3</version>
    <version>3.5.4444</version>
    <version>3.6.0</version>
    <version>3.6.1</version>
    <version>3.6.5</version>
    <version>3.6.6</version>
    <version>3.6.7</version>
    <version>3.6.8</version>
    </versions>
    <lastUpdated>20141016143914</lastUpdated>
    </versioning>
    </metadata>

Java代碼..

    public class MavenMetadataReader {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    BufferedReader reader = null;
    try {
        URL url = new URL("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/MasterData/maven-metadata.xml");

        reader = new BufferedReader(new InputStreamReader(url.openStream()));
        while (reader.ready()) {
            System.out.println(reader.readLine());
        }
    } catch (MalformedURLException ex) {
        Logger.getLogger(MavenMetadataReader.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(MavenMetadataReader.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException ex) {
                Logger.getLogger(MavenMetadataReader.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

   }
   }

編輯 1:

我使用@Khalid Alqinyah 提供的答案來解決我的問題。最終的 Java 代碼。

   public class MavenMetadataReader {


/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws XMLStreamException {

   try {
URL url = new URL("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/MasterData/maven-metadata.xml");
XMLStreamReader reader1 = XMLInputFactory.newInstance().createXMLStreamReader(url.openStream());
String Latest = null;
while (reader1.hasNext()) {
    if (reader1.next() == XMLStreamConstants.START_ELEMENT) {
        if (reader1.getLocalName().equals("latest")) {
            Latest = reader1.getElementText();
            break;
        }
    }
}
System.out.println(Latest);
} catch (IOException ex) {
// handle exception
Logger.getLogger(MavenMetadataReader.class.getName()).log(Level.SEVERE, null, ex);
 } catch (XMLStreamException ex) {
// handle exception
Logger.getLogger(MavenMetadataReader.class.getName()).log(Level.SEVERE, null, ex);
} finally {
// close the stream


     }   

 }

 }

您不需要外部庫。 使用XPath

public String readLatestVersion(String xmlUri) throws Exception {

    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = builderFactory.newDocumentBuilder();
    Document document = builder.parse(xmlUri);

    XPath xPath = XPathFactory.newInstance().newXPath();
    String expression = "/metadata/versioning/latest";
    String latestVersion = xPath.compile(expression).evaluate(document);

    return latestVersion;
}

要調用上述方法,請使用:

String latestVersion = readLatestVersion("http://example.org/maven-metadata.xml");

為了把事情做好,請確保您有以下導入:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;

一種可能的方法是逐行讀取流並在找到所需內容時停止。

XMLStreamReader reader = null;
try {
    URL url = new URL("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/MasterData/maven-metadata.xml");
    reader = XMLInputFactory.newInstance().createXMLStreamReader(url.openStream());
    String latest;
    while (reader.hasNext()) {
        if (reader.next() == XMLStreamConstants.START_ELEMENT) {
            if (reader.getLocalName().equals("latest")) {
                latest = reader.getElementText();
                break;
            }
        }
    }
} catch (IOException ex) {
    // handle exception
} catch (XMLStreamException ex) {
    // handle exception
} finally {
    // close the stream
}

我用XMLBeam做這樣的事情:

class Answer {
    @XBDocUrl("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/MasterData/maven-metadata.xml")
    public interface MavenMetadata {
        @XBRead("//latest")
        String getLatest();
    }
    public static void main(String[] args) {
        MavenMetadata metadata = new XBProjector().io().fromURLAnnotation(MavenMetadata.class);
        System.out.println(metadata.getLatest());
    }
}

如果您查看項目站點,甚至還有閱讀 maven pom.xml 文件的教程。

如果您僅限於使用標准 Java 功能,我建議您進一步閱讀有關標准 JDK 的SAXParser類的信息。 它是一種在 Java 中解析 XML 文檔的便捷方法。

一種選擇是使用 XPath。 嘗試這個:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("http://hsv-artifactory.emrsn.org:8081/artifactory/libs-release-local/com/avocent/commonplatform/cps/symbols/MasterData/maven-metadata.xml");
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//latest").evaluate(doc);

如果在您的項目中可用,您可以使用org.apache.maven.artifact.repository.metadata進行解析。

import java.io.InputStream;
import java.net.URL;    
import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;

[...]

URL url = new URL("http://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/maven-metadata.xml");       
InputStream inputStream = url.openStream();
MetadataXpp3Reader metadataXpp3Reader = new MetadataXpp3Reader();
Metadata metadata = metadataXpp3Reader.read(inputStream);
inputStream.close();

System.out.println("groupId: " + metadata.getGroupId());
System.out.println("artifactId: " + metadata.getArtifactId());
System.out.println("latest: " + metadata.getVersioning().getLatest());

暫無
暫無

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

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