Пример за четене на xml файл, като ресурс от jar файл.
CODE
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | /* * Пример за четене на xml файл, като ресурс от jar файл. * Парсване с XPath. * Примерен xml файл е даден в края на файла. */ package examples; import java.io.IOException; import java.io.InputStream; import java.util.Vector; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * * @author jan */ public class ReadXmlIni { //Име на файла private String fileName = "/examples/resources/mgame.xml"; //id на лабиринта public int id_maze = 0; //хоризонтални стени на лабиринта public Vector wallh; //вертикални стени на лабиринта public Vector wallv; public String msgString; public String getMsgString() { return msgString; } public ReadXmlIni() { wallh = new Vector(0); wallv = new Vector(0); msgString = ""; } public void LoadMazeData(String id) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputStream is = ReadXmlIni.class.getResourceAsStream(fileName); Document doc = db.parse(is); XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); //вземаме данните за вертикалните стени XPathExpression expr = xpath.compile("//mgame/mazes/maze[@id='" + id +"']/walls/vertical/data/text()"); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; for (int i = 0; i < nodes.getLength(); i++) { wallv.addElement((String)nodes.item(i).getNodeValue()); } //вземаме данните за хоризонталните стени expr = xpath.compile("//mgame/mazes/maze[@id='" + id +"']/walls/horizontal/data/text()"); result = expr.evaluate(doc, XPathConstants.NODESET); nodes = (NodeList) result; for (int i = 0; i < nodes.getLength(); i++) { wallh.addElement((String)nodes.item(i).getNodeValue()); } //вземаме точно определени данни expr = xpath.compile("//mgame/mazes/maze[@id='" + id +"']/messages[@id='1']/text()"); result = expr.evaluate(doc, XPathConstants.STRING); msgString = result.toString(); } catch (XPathExpressionException ex) { ex.printStackTrace(); } catch (SAXException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } catch (ParserConfigurationException ex) { ex.printStackTrace(); } } public Vector getWallv() { return wallv; } public Vector getWallh() { return wallh; } public static void main(String[] args) { ReadXmlIni rxi = new ReadXmlIni(); rxi.LoadMazeData("7"); Vector tmp = rxi.getWallv(); for (int i = 0; i < tmp.size(); i++) { System.out.println(tmp.get(i).toString()); } System.out.println(rxi.getMsgString()); } } /* * Примерен xml файл намиращ се в пакет examples.resources <?xml version="1.0" encoding="UTF-8"?> <mgame> <mazes> <maze id="7"> <walls> <vertical> <data>101010101</data> <data>000010000</data> <data>101010001</data> <data>101010101</data> <data>101000111</data> </vertical> <horizontal> <data>11110111</data> <data>10100011</data> <data>10100011</data> <data>10101010</data> <data>01101001</data> <data>11111111</data> </horizontal> </walls> <messages id="1">Messa 1</messages> </maze> <maze id="1"> <walls> <vertical> <data>101010101</data> <data>001010000</data> <data>101010101</data> <data>111010101</data> <data>101000111</data> </vertical> <horizontal> <data>11111111</data> <data>10100011</data> <data>10100011</data> <data>10101010</data> <data>01101011</data> <data>11111111</data> </horizontal> </walls> <messages id="1">Messa 2</messages> </maze> </mazes> </mgame> */ |





