如何使用java从xml文件中读取十六进制值

时间:2012-02-08 10:40:20

标签: java mysql hex blob

我正在尝试使用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内容。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

如果您需要解码编码为Hex的长值,您可以使用此类:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html

例如,如果将值存储在char []数组中,则可以使用Hex.decodeHex(char[] data)将其转换为raw byte []数组。我假设您将BLOB视为二进制内容。