我正在尝试使用java从xml文件中获取数据。
使用mysqldump将数据库表转换为xml。
表包含一个BLOB类型的字段。
表格结构:
CREATE TABLE `test` (
`image` BLOB
) ENGINE=INNODB DEFAULT CHARSET=utf8
使用以下过程
以十六进制值备份数据mysqldump -uuser -ppassword test test --compact --no-create-info --hex-blob > check.sql --xml
在xml blob字段中的内容是十六进制值。
我尝试的Java代码是
public static void main(String args[]) {
try {
File fXmlFile = new File("E:\\check.sql");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("row");
System.out.println("-----------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println(" Image " + getTagValueUsingAttributeName("field","image", eElement));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getTagValueUsingAttributeName(String sTag, String attributeName, Element eElement){
String value="";
for(int i=0;i<eElement.getElementsByTagName(sTag).getLength();i++){
if((eElement.getElementsByTagName(sTag).item(i).getAttributes().getNamedItem("name").getTextContent()).equalsIgnoreCase(attributeName)){
System.out.println(" - "+eElement.getElementsByTagName(sTag).item(i).getAttributes().getNamedItem("name").getTextContent());
NodeList nlList = eElement.getElementsByTagName(sTag).item(i).getChildNodes();
System.out.println(1);
Node nValue = (Node) nlList.item(0);
if(nValue!=null)
System.out.println(2+" - "+(nValue.getNodeType() == Node.TEXT_NODE));
value = (nValue==null)?" ":nValue.getTextContent();
break;
}
}
return value;
}
但我无法读取xml文件进行解析。
注意: 我试图将xml文件放在stackoverflow中,但它不允许我添加xml内容。
请帮帮我。
答案 0 :(得分:0)
如果您需要解码编码为Hex的长值,您可以使用此类:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html
例如,如果将值存储在char []数组中,则可以使用Hex.decodeHex(char[] data)
将其转换为raw byte []数组。我假设您将BLOB视为二进制内容。