2012-02-08 9 views
0

javaを使用してxmlファイルからデータを取得しようとしています。xmlファイルからJavaを使用して16進数値を読み取る方法

mysqldumpを使用すると、データベーステーブルがxmlに変換されます。

テーブルには、BLOBタイプのフィールドが1つ含まれています。

表構造:進値を持つデータまで戻る

CREATE TABLE `test` (
    `image` BLOB 
) ENGINE=INNODB DEFAULT CHARSET=utf8 

XMLブロブフィールドの内容には、次の手順

mysqldump -uuser -ppassword test test --compact --no-create-info --hex-blob > check.sql --xml 

を使用して16進数の値です。私が試した

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

コードブロックなどで適切に行う限り、XMLデータを投稿することができます。それ以外の場合、HTMLタグとして解釈され、効果的に無視されます。 –

+0

とにかく、あなたが走っている特定の問題は何ですか? 「私は解析するためのXMLファイルを読むことができません」と言ったので、あなたが与えた情報に基づいて 'E:\ check.sql'が存在しないと結論付けることができます。また、これは16進数の権利とは関係ありません。ファイルを読む際に問題を尋ねるだけです。 –

+0

'E:\ check.sql'はmysqldumpによって生成されたファイルです(コードタグで指定されています) – Mohan

答えて

0

あなたは六角としてエンコードされたlong値をデコードする必要がある場合は、このクラスを使用することができます:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html

たとえば、あなたがあなたのcharに格納された値が[]配列を持っている場合は、生のバイトに変換するHex.decodeHex(char[] data)を使用することができます[ ]配列。 BLOBをバイナリ・コンテンツとして扱っていると仮定しています。

+0

私は値をデコードしたくありません。ちょうど私はXMLからコンテンツを読み込もうとしています。 – Mohan

+0

したがって、XMLファイルを解析しようとしています。これは別の話題です。これを試してください:http://www.javaworld.com/javaworld/jw-08-2000/jw-0804-sax.html – Lukasz

関連する問題