久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用 vtd-xml 解析 xml 文件

Parse xml file using vtd-xml(使用 vtd-xml 解析 xml 文件)
本文介紹了使用 vtd-xml 解析 xml 文件的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

如何在 java 或 C 中使用 vtd-xml 解析如下的 xml 文件?

How can i parse a xml file like the following using vtd-xml in java or C ?

<?xml version="1.0" encoding="utf-8"?>
<StockReport>
  <Article Code="027783012" Height="35" Width="36" Length="136"  TotalPacks="4" AvailablePacks="4" StockReturnPacks="4" BlockedPacks="0" NextExpiryDate="2015-01-17">
      <Machine Number="1" TotalPacks="4" AvailablePacks="4" StockReturnPacks="4" BlockedPacks="0" NextExpiryDate="2015-01-17" />
 </Article>
 <Article Code="025349109" Height="36" Width="37" Length="129" TotalPacks="6" AvailablePacks="6" StockReturnPacks="6" BlockedPacks="0" NextExpiryDate="2015-01-17">
      <Machine Number="1" TotalPacks="6" AvailablePacks="6" StockReturnPacks="6" BlockedPacks="0" NextExpiryDate="2015-01-17" />
 </Article>
 <Article Code="039154327" Height="0" Width="0" Length="0" TotalPacks="0" AvailablePacks="0" StockReturnPacks="0" BlockedPacks="0" NextExpiryDate="" />
 <Article Code="932654167" Height="57" Width="99" Length="137" TotalPacks="27" AvailablePacks="27" StockReturnPacks="27" BlockedPacks="0" NextExpiryDate="2014-04-17">
    <Machine Number="1" TotalPacks="16" AvailablePacks="16" StockReturnPacks="16" BlockedPacks="0" NextExpiryDate="2015-01-17" />
    <Machine Number="2" TotalPacks="11" AvailablePacks="11" StockReturnPacks="11" BlockedPacks="0" NextExpiryDate="2014-04-17" />
 </Article>
</StockReport>

任何幫助將不勝感激.

謝謝

推薦答案

我猜這部分取決于你想如何解析文件.

I guess some of this depends on how you want to parse the file.

這是一個非生產"示例,它使用了一些有用的技術,包括:

Here's a "non-production" example which uses a few techniques which are useful, including:

  • XPath 選擇(這里只使用/*")
  • 查看所有兄弟節點
  • 向下看子節點
  • 使用 AutoPilot 將節點屬性提取到地圖中

希望對你有幫助

package scce;

import com.ximpleware.AutoPilot;
import com.ximpleware.NavException;
import com.ximpleware.VTDGen;
import com.ximpleware.VTDNav;
import com.ximpleware.XPathEvalException;
import com.ximpleware.XPathParseException;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 *
 * @author David
 */
public class VTDParserExample {

    VTDGen vg;
    VTDNav vn;

    public VTDParserExample() {
        vg = new VTDGen();    
    }

    public void parseAndPrint() throws NavException {

        int level = 0;

        for(boolean el = (vn != null); 
                    el == true ;
                    el = vn.toElement(VTDNav.NEXT_SIBLING)) {

            printTag(vn, level);

            parseAndPrintChildren(level);                
        }

    } 

     private void parseAndPrintChildren(int level) throws NavException {

        vn.push();

        for(boolean el = vn.toElement(VTDNav.FIRST_CHILD); 
                    el == true ;
                    el = vn.toElement(VTDNav.NEXT_SIBLING)) {

            printTag(vn, level + 1);

            parseAndPrintChildren(level + 1);                
        }

        vn.pop();

    }

    public VTDNav loadFile(String filePath) throws IOException {

        File fDoc = new File(filePath);

        if (fDoc != null && fDoc.exists()) {
            System.out.println("loadFile file exists ["+filePath+"]");

            vg.clear();
            if (vg.parseFile(filePath, true)) {
                vn = vg.getNav();
            }
        }
        else {
            throw new IOException("File ["+filePath+"] invalid");
        }             

        if (vn == null) {                
            throw new IOException("Cannot parse file ["+filePath+"]");
        }

        return vn;
    }

    public void getElementsByXpath() {

        AutoPilot ap = new AutoPilot(vn);

        try
        {
            String xpQ = "/*";

            ap.selectXPath(xpQ);    
            if (ap.evalXPathToBoolean()) {
                ap.evalXPath();
            }
            else {
                System.out.println(this.getClass()+".getAllElements evalXPathToBoolean["+ap.evalXPathToBoolean()+"]");
            }
        }
        catch(XPathParseException | XPathEvalException | NavException e) {
            e.printStackTrace();
        }            

    }

    private void loadAttributeMap(VTDNav nav, Map<String, String>amap) {      

        nav.push();

        try {
            AutoPilot apAtt = new AutoPilot(nav);
            apAtt.selectXPath("@*");

            int j=-1;
            while ((j=apAtt.evalXPath())!=-1) {
                String name = nav.toString(j);
                String val = nav.toString(j+1);

                amap.put(name, val);
            }                     
        }
        catch(XPathParseException | XPathEvalException | NavException e) {
            e.printStackTrace();
        }

        nav.pop();        
    }     

    private void printTag(VTDNav vn, int level) throws NavException {

        String tag = vn.toString(vn.getCurrentIndex());
        System.out.print("Level ["+level+"] Tag ["+tag+"]");

        Map<String, String>amap = new LinkedHashMap<String, String>();

        loadAttributeMap(vn, amap);

        for (String aname: amap.keySet()) {
            String aval = amap.get(aname);

            System.out.print(" @"+aname+"="+aval);
        }
        System.out.print("
");
    }

    public static void main(String[] args) {

        VTDParserExample vp = new VTDParserExample();

        try {

            vp.loadFile("src/scce/famedoro.xml");                                     
            vp.getElementsByXpath();
            vp.parseAndPrint();

        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

產生以下輸出:

loadFile file exists [src/scce/famedoro.xml]
Level [0] Tag [StockReport]
Level [1] Tag [Article] @Code=027783012 @Height=35 @Width=36 @Length=136 @TotalPacks=4 @AvailablePacks=4 @StockReturnPacks=4 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [2] Tag [Machine] @Number=1 @TotalPacks=4 @AvailablePacks=4 @StockReturnPacks=4 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [1] Tag [Article] @Code=025349109 @Height=36 @Width=37 @Length=129 @TotalPacks=6 @AvailablePacks=6 @StockReturnPacks=6 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [2] Tag [Machine] @Number=1 @TotalPacks=6 @AvailablePacks=6 @StockReturnPacks=6 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [1] Tag [Article] @Code=039154327 @Height=0 @Width=0 @Length=0 @TotalPacks=0 @AvailablePacks=0 @StockReturnPacks=0 @BlockedPacks=0 @NextExpiryDate=
Level [1] Tag [Article] @Code=932654167 @Height=57 @Width=99 @Length=137 @TotalPacks=27 @AvailablePacks=27 @StockReturnPacks=27 @BlockedPacks=0 @NextExpiryDate=2014-04-17
Level [2] Tag [Machine] @Number=1 @TotalPacks=16 @AvailablePacks=16 @StockReturnPacks=16 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [2] Tag [Machine] @Number=2 @TotalPacks=11 @AvailablePacks=11 @StockReturnPacks=11 @BlockedPacks=0 @NextExpiryDate=2014-04-17

添加帶有 AutoPilot 循環的示例(而不是像上面那樣純粹基于節點)不能很好地混合這些

Adding example with AutoPilot loop (rather than purely node based as above) doesn't mix these very well

package scce;

import com.ximpleware.AutoPilot;
import com.ximpleware.NavException;
import com.ximpleware.VTDGen;
import com.ximpleware.VTDNav;
import com.ximpleware.XPathEvalException;
import com.ximpleware.XPathParseException;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author David
 */
public class VTDParserExample {

    VTDGen vg;
    VTDNav vn;
    AutoPilot ap;

    public VTDParserExample() {
        vg = new VTDGen();    
    }

    public void parseAndPrint() throws NavException {

        int level = 0;

        for(boolean el = (vn != null); 
                    el == true ;
                    el = vn.toElement(VTDNav.NEXT_SIBLING)) {

            printTag(vn, level);

            parseAndPrintChildren(level);                
        }

    } 

     private void parseAndPrintChildren(int level) throws NavException {

        vn.push();

        for(boolean el = vn.toElement(VTDNav.FIRST_CHILD); 
                    el == true ;
                    el = vn.toElement(VTDNav.NEXT_SIBLING)) {

            printTag(vn, level + 1);

            parseAndPrintChildren(level + 1);                
        }

        vn.pop();

    }

    private VTDNav loadFile(String filePath) throws IOException {

        File fDoc = new File(filePath);

        if (fDoc != null && fDoc.exists()) {
            System.out.println("loadFile file exists ["+filePath+"]");

            vg.clear();
            if (vg.parseFile(filePath, true)) {
                vn = vg.getNav();
            }
        }
        else {
            throw new IOException("File ["+filePath+"] invalid");
        }             

        if (vn == null) {                
            throw new IOException("Cannot parse file ["+filePath+"]");
        }

        return vn;
    }

    public boolean getElementsByXpath() {
        boolean found = false;

        ap = new AutoPilot(vn);

        try
        {
            String xpQ = "http://Machine";

            ap.selectXPath(xpQ);    
            if (ap.evalXPathToBoolean()) {
                found = true;
            }
            else {
                System.out.println(this.getClass()+".getAllElements evalXPathToBoolean["+ap.evalXPathToBoolean()+"]");
            }
        }
        catch(XPathParseException e) {
            e.printStackTrace();
        }            

        return found;
    }

    private void loadAttributeMap(VTDNav nav, Map<String, String>amap) {      

        nav.push();

        try {
            AutoPilot apAtt = new AutoPilot(nav);
            apAtt.selectXPath("@*");

            int j=-1;
            while ((j=apAtt.evalXPath())!=-1) {
                String name = nav.toString(j);
                String val = nav.toString(j+1);

                amap.put(name, val);
            }                     
        }
        catch(XPathParseException | XPathEvalException | NavException e) {
            e.printStackTrace();
        }

        nav.pop();        
    }     

    private void printTag(VTDNav vn, int level) throws NavException {

        String tag = vn.toString(vn.getCurrentIndex());
        System.out.print("Level ["+level+"] Tag ["+tag+"]");

        Map<String, String>amap = new LinkedHashMap<String, String>();

        loadAttributeMap(vn, amap);

        for (String aname: amap.keySet()) {
            String aval = amap.get(aname);

            System.out.print(" @"+aname+"="+aval);
        }
        System.out.print("
");
    }

    public static void main(String[] args) {

        VTDParserExample vp = new VTDParserExample();

        try {

            vp.loadFile("src/scce/famedoro.xml");
            if (vp.getElementsByXpath()) {
                 vp.parseAndPrintAP();                
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void parseAndPrintAP() {
        int level = 0;
        int result = -1;

        try {
            while((result = ap.evalXPath())!=-1){
                printTag(vn, level);

                parseAndPrintChildren(level);                

            }
        } catch (XPathEvalException | NavException ex) {
            ex.printStackTrace();
        }
    }

}

這 - 將不同的 XPath 設置為//Machine"會產生:

This - with different XPath set to "http://Machine" produces:

loadFile file exists [src/scce/famedoro.xml]
Level [0] Tag [Machine] @Number=1 @TotalPacks=4 @AvailablePacks=4 @StockReturnPacks=4 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [0] Tag [Machine] @Number=1 @TotalPacks=6 @AvailablePacks=6 @StockReturnPacks=6 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [0] Tag [Machine] @Number=1 @TotalPacks=16 @AvailablePacks=16 @StockReturnPacks=16 @BlockedPacks=0 @NextExpiryDate=2015-01-17
Level [0] Tag [Machine] @Number=2 @TotalPacks=11 @AvailablePacks=11 @StockReturnPacks=11 @BlockedPacks=0 @NextExpiryDate=2014-04-17

這篇關于使用 vtd-xml 解析 xml 文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Upload progress listener not fired (Google drive API)(上傳進度偵聽器未觸發(Google 驅動器 API))
Save file in specific folder with Google Drive SDK(使用 Google Drive SDK 將文件保存在特定文件夾中)
Google Drive Android API - Invalid DriveId and Null ResourceId(Google Drive Android API - 無效的 DriveId 和 Null ResourceId)
Google drive api services account view uploaded files to google drive using java(谷歌驅動api服務賬戶查看上傳文件到谷歌驅動使用java)
Google Drive service account returns 403 usageLimits(Google Drive 服務帳號返回 403 usageLimits)
com.google.api.client.json.jackson.JacksonFactory; missing in Google Drive example(com.google.api.client.json.jackson.JacksonFactory;Google Drive 示例中缺少)
主站蜘蛛池模板: 亚洲网站在线观看 | 日韩插插| 日韩在线观看中文字幕 | 91亚洲欧美 | 久久久www成人免费精品张筱雨 | 91视频.com| 国产精品亚洲第一区在线暖暖韩国 | 99tv成人影院 | 国产精品综合久久 | 精品久久久精品 | 成人精品视频在线观看 | 成人精品毛片国产亚洲av十九禁 | 91精品久久久久 | 国产亚洲一区二区三区 | 国产精品久久久久久久久久久久久 | 怡红院怡春院一级毛片 | 久久99精品久久久久久狂牛 | 亚洲国产精品久久 | 欧美日韩国产一区二区 | 日韩欧美成人一区二区三区 | 免费一区二区 | 国产成人福利视频在线观看 | 精品免费国产视频 | 99久久久99久久国产片鸭王 | 精品一区二区三区在线观看国产 | 午夜亚洲 | 午夜精品一区二区三区在线观看 | 国产黄色大片 | 国产无套一区二区三区久久 | 国产精品福利视频 | 日韩av手机在线观看 | 蜜桃臀av一区二区三区 | 国产99久久精品一区二区永久免费 | 在线免费观看一区二区 | 久久中文视频 | 在线观看国产精品视频 | 美女黄网站视频免费 | 伊人精品| 三级黄色片在线播放 | 国产精品一区二区久久精品爱微奶 | 在线看一区二区三区 |