Как прочитать шестнадцатеричное значение из файла XML с помощью Java - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь получить данные из XML-файла, используя Java.

с помощью 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 голосов
/ 08 февраля 2012

Если вам нужно декодировать длинное значение в шестнадцатеричном формате, вы можете использовать этот класс: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html

Например, если ваше значение хранится в массиве char [], вы можете использовать Hex.decodeHex(char[] data) для преобразованияэто в сыром массиве byte [].Я предполагаю, что вы рассматриваете свой BLOB как двоичный контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...