Java 从XML文件读取
我一直在试图找到一种从Java中的XML文件中读取特定数据的方法。我正在使用DOM和SAX 我正在创建一个方法Java 从XML文件读取,java,xml,file,Java,Xml,File,我一直在试图找到一种从Java中的XML文件中读取特定数据的方法。我正在使用DOM和SAX 我正在创建一个方法readLayoutFile(stringareaname),程序将为请求的区域返回以下变量:varChecked,varGeo[][] 我的问题是如何指定要在三角形1下检查的值。另外,如何调用三角形1下的几何体下的所有坐标 提前谢谢。 /克里斯 编辑:到目前为止,我只读取了整个XML文件中的大部分数据,这与我实际想要做的工作相差甚远: try { Fi
readLayoutFile(stringareaname)
,程序将为请求的区域返回以下变量:varChecked
,varGeo[][]
我的问题是如何指定要在三角形1下检查的值。另外,如何调用三角形1下的几何体下的所有坐标
提前谢谢。
/克里斯
编辑:到目前为止,我只读取了整个XML文件中的大部分数据,这与我实际想要做的工作相差甚远:
try {
File fXmlFile = new File("C:\\Users/Chris/Desktop/layout1.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList areaList = doc.getElementsByTagName("area");
for (int i = 0; i < areaList.getLength(); i++) {
Node areaNode = areaList.item(i);
System.out.println();
if (areaNode.getNodeType() == Node.ELEMENT_NODE) {
Element areaElement = (Element) areaNode;
System.out.println("Area Name : " + areaElement.getAttribute("name"));
System.out.println("Checked : " + areaElement.getElementsByTagName("checked").item(0).getTextContent());
NodeList geoList = doc.getElementsByTagName("geometries");
for (int j = 0; j < geoList.getLength(); j++) {
NodeList geomList = doc.getElementsByTagName("geo");
Node geoNode = geomList.item(j);
if (geoNode.getNodeType() == Node.ELEMENT_NODE) {
Element geoElement = (Element) geoNode;
System.out.println("Geo Point " + (j+1) + ": " + geoElement.getAttribute("lat") + ", " + geoElement.getAttribute("long"));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
试试看{
文件fXmlFile=新文件(“C:\\Users/Chris/Desktop/layout1.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
节点列表区域列表=doc.getElementsByTagName(“区域”);
对于(int i=0;i
如果希望将结构存储在内存中以供重复查询,请使用JAXB将整个文档存储在Java POJO结构中
如果是一次性的,使用SAX。以下是查找条目的处理程序:
import java.util.ArrayList;
import java.util.Collection;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
public class GeoFinder implements ContentHandler
{
private final String areaName;
private boolean capturing;
private Collection<float[]> geoList;
public GeoFinder(String areaName)
{
this.areaName = areaName;
}
public float[][] getGeoList()
{
if (geoList == null)
{
return null;
}
return geoList.toArray(new float[geoList.size()][]);
}
@Override
public void characters(char[] ch, int start, int length) {}
@Override
public void endDocument() {}
@Override
public void endElement(String uri, String localName, String qName)
{
if ("area".equals(localName))
{
capturing = false;
}
}
@Override
public void endPrefixMapping(String prefix) throws SAXException {}
@Override
public void ignorableWhitespace(char[] ch, int start, int length) {}
@Override
public void processingInstruction(String target, String data) {}
@Override
public void setDocumentLocator(Locator locator) {}
@Override
public void skippedEntity(String name) {}
@Override
public void startDocument() {}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts)
{
if ("area".equals(localName))
{
if (areaName.equals(atts.getValue("name")))
{
capturing = true;
geoList = new ArrayList<float[]>();
}
}
else if ("geo".equals(localName) && capturing)
{
geoList.add(new float[]{
Float.parseFloat(atts.getValue("lat")),
Float.parseFloat(atts.getValue("long")),
});
}
}
@Override
public void startPrefixMapping(String prefix, String uri) {}
}
向我们展示您尝试使用DOM读取此文件的代码。根据请求添加了代码。
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
GeoFinder gf = new GeoFinder("Triangle1");
xmlReader.setContentHandler(gf);
InputStream is = new FileInputStream("C:\\Users/Chris/Desktop/layout1.xml");
try
{
xmlReader.parse(new InputSource(is));
}
finally
{
try
{
is.close();
}
catch (Throwable t)
{
t.printStackTrace();
}
}
if (gf.getGeoList() == null)
{
System.err.println("No area found");
}
else
{
for (float[] e: gf.getGeoList())
{
System.out.println(e[0] + ", " + e[1]);
}
}