2017-03-05 205 views
0

我得到一個xml字符串,我想解析並從中獲取數據。我試圖解析它爲json,但是我得到了空括號。如何解析XML並從XML字符串中獲取數據?

public class ResultsActivity extends Activity { 

    String outputPath; 
    TextView tv; 
    public static int PRETTY_PRINT_INDENT_FACTOR = 4; 
    public static String TEST_XML_STRING; 
    DocumentBuilder builder; 
    InputStream is; 
    Document dom; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     tv = new TextView(this); 
     setContentView(tv); 

     String imageUrl = "unknown"; 

     Bundle extras = getIntent().getExtras(); 
     if(extras != null) { 
      imageUrl = extras.getString("IMAGE_PATH"); 
      outputPath = extras.getString("RESULT_PATH"); 
     } 

     // Starting recognition process 
     new AsyncProcessTask(this).execute(imageUrl, outputPath); 
    } 

    public void updateResults(Boolean success) { 
     if (!success) 
      return; 
     try { 
      StringBuffer contents = new StringBuffer(); 

      FileInputStream fis = openFileInput(outputPath); 
      try { 
       Reader reader = new InputStreamReader(fis, "UTF-8"); 
       BufferedReader bufReader = new BufferedReader(reader); 
       String text = null; 
       while ((text = bufReader.readLine()) != null) { 
        contents.append(text).append(System.getProperty("line.separator")); 
       } 
      } finally { 
       fis.close(); 
      } 
     XmlToJson xmlToJson = new XmlToJson.Builder(contents.toString()).build(); 

// convert to a JSONObject 
      JSONObject jsonObject = xmlToJson.toJson(); 

// OR convert to a Json String 
      String jsonString = xmlToJson.toString(); 

// OR convert to a formatted Json String (with indent & line breaks) 
      String formatted = xmlToJson.toFormattedString(); 
      Log.e("xml",contents.toString()); 
      Log.e("json",jsonObject.toString()); 


     } catch (Exception e) { 
      displayMessage("Error: " + e.getMessage()); 
     } 
    } 


    public void displayMessage(String text) 
    { 
     tv.post(new MessagePoster(text)); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_results, menu); 
     return true; 
    } 

    class MessagePoster implements Runnable { 
     public MessagePoster(String message) 
     { 
      _message = message; 
     } 

     public void run() { 
      tv.append(_message + "\n"); 
      setContentView(tv); 
     } 

     private final String _message; 
    } 
} 

我跟着這個鏈接:https://github.com/smart-fun/XmlToJson

我只能解析XML?我怎樣才能從XML字符串中獲取數據?

以下是XML字符串:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd" xmlns="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd"> 
<businessCard imageRotation="noRotation"> 
    <field type="Mobile"> 
    <value>•32147976</value> 
    </field> 
    <field type="Address"> 
    <value>Timing: 11:00 a.m. to 5.00 p.m</value> 
    </field> 
    <field type="Address"> 
    <value>MULTOWECIALITY HOSPITAL Havnmg Hotel MwyantfwfMf), TOL: 1814 7»7»/0454 7575 fax: 2514 MSS MtoMte t wvHwJaMtur0Mapttal.com</value> 
    </field> 
    <field type="Name"> 
    <value>M. S. (Surgery), Fais, Fics</value> 
    </field> 
    <field type="Company"> 
    <value>KASTURI MEDICARE PVT. LTD.</value> 
    </field> 
    <field type="Job"> 
    <value>Consulting General Surgeon Special Interest: Medical Administrator: KsturiSecretary: IMA - Mira</value> 
    </field> 
    <field type="Text"> 
    <value>Mob.: •32114976 
    Dr. Rakhi R 
    M. S. (Surgery), Surgeon 
    Special Interest:        Medical 
    President: Bhayander Medical Association 
    Scientific Secretary: IMA - Mira Bhayander 
    Timing: 11:00 a.m. to 5.00 p.m 
    % 
    * 
    KASTURI MEDICARE PVT. LTD. 
    ISO 9001:2008 Certified, ASNH Cliniq 21 Certified, 
    MtoMte t wvHwJaMtur0Mapttal.com 
    mkhLkasturi0gmoiH.com</value> 
    </field> 
</businessCard> 

我檢查這個鏈接來解析XML:http://androidexample.com/XML_Parsing_-_Android_Example/index.php?view=article_discription&aid=69

但這串劑量沒有名單,我沒有得到如何解析這個xml字符串。任何人都可以幫忙嗎?謝謝..

+0

我會給你建議,將其轉換爲JSON然後解析JsonObject。這比解析XML容易。 –

+0

使用XML PullParser在android中解析XML。 –

+0

這是一個關於使用Json解析數據的完整示例,它可能有所幫助:http://www.androidhive.info/2014/07/android-custom-listview-with-image-and-text-using-volley/ –

回答

1

您可以輕鬆地解析Json而不是XML

所以我會建議你解析JSON,

先轉換XMLJso N,則解析JsonObject

這裏是你可以採取分步

https://stackoverflow.com/a/18339178/6676466

+0

已經嘗試過這一點,因此這會給空括號。 – Sid

+0

我測試過這段代碼。它在我身邊完美運行... 將有您的XML數據的問題..你可以發佈你的XML數據...? –

+0

知道了,謝謝你..你能幫助解決這個問題嗎? http://stackoverflow.com/questions/42612426/how-to-get-values-from-json-string – Sid

0

FOR XML到XML轉換成JSON解析步,你可以去任何XML Pull ParserXML DOM Parser參考。 這兩個過程都非常冗長,涉及到很多代碼,因爲它着重於手動解析XML。

另一種方法是在您的項目中使用This Library,並且大部分工作已完成。它將解析您的XML,就像使用GSON解析您的JSON一樣。 所有你需要做的就是創建解析器的一個實例,並使用它像:

XmlParserCreator parserCreator = new XmlParserCreator() { 
    @Override 
    public XmlPullParser createParser() { 
     try { 
     return XmlPullParserFactory.newInstance().newPullParser(); 
     } catch (Exception e) { 
     throw new RuntimeException(e); 
     } 
    } 
    }; 

    GsonXml gsonXml = new GsonXmlBuilder() 
    .setXmlParserCreator(parserCreator) 
    .create(); 

    String xml = "<model><name>my name</name><description>my description</description></model>"; 
    SimpleModel model = gsonXml.fromXml(xml, SimpleModel.class); 

記住,你需要創建一個POJO類的迴應,就像你做GSON。

compile 'com.stanfy:gson-xml-java:0.1.+' 

請閱讀github上鍊接庫仔細瞭解使用和限制:

使用包括在你的gradle這個庫。

0

從你的問題我沒有理由將xml轉換爲json,只是爲了獲得直接從xml中取出某些字段的方法。

如果在後續步驟中不需要處理json數據,我建議您使用XPATH。使用XPath的你像「/文件/的businesscard /場[@類型=‘移動’] /值」的簡單路徑查詢XML就可以得到數據

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document doc = builder.parse(URI_TO_YOUR_DOCUMENT); 
XPathFactory xPathfactory = XPathFactory.newInstance(); 
XPath xpath = xPathfactory.newXPath(); 
XPathExpression expr = xpath.compile("/document/businessCard/field[@type='Mobile']/value"); 
+0

和我怎樣才能得到這個字符串? – Sid