2014-02-19 58 views
0

我是一個初學者,解析並且我想在用戶的幫助下創建一個XML。但是我不能追加xml.can你請幫我解決這個問題。 amy無法正確格式化代碼。使用xmlserializer追加xml節點

public static String xmlSerialize(NewRecordDTO data) throws IllegalArgumentException, IllegalStateException, IOException 
{ 

    File sdCard=Environment.getExternalStorageDirectory(); 
    File dir=new File(sdCard.getAbsolutePath()+"/backup"); 
    dir.mkdirs(); 
    File file=new File(dir,"diary.xml"); 
    FileOutputStream fos=new FileOutputStream(file, true); 


    XmlSerializer xmlserializer=Xml.newSerializer(); 
    StringWriter writer=new StringWriter(); 
    xmlserializer.setOutput(writer); 
    xmlserializer.startDocument("UTF-8", true); 

    xmlserializer.startTag("", "LawyerRecords"); 
    xmlserializer.startTag("", "Record"); 

    xmlserializer.startTag("", "UID"); 
    xmlserializer.text(data.getUid()); 
    xmlserializer.endTag("", "UID"); 

    xmlserializer.startTag("", "PrevDate"); 
    xmlserializer.text(data.getPrev_date()); 
    xmlserializer.endTag("", "PrevDate"); 

    xmlserializer.startTag("", "CourtName"); 
    xmlserializer.text(data.getCaseName()); 
    xmlserializer.endTag("", "CourtName"); 

    xmlserializer.startTag("", "CaseNo"); 
    xmlserializer.text(data.getCaseNo()); 
    xmlserializer.endTag("", "CaseNo"); 

    xmlserializer.startTag("", "ForPartyName"); 
    xmlserializer.text(data.getForParty()); 
    xmlserializer.endTag("", "ForPartyName"); 

    xmlserializer.startTag("", "AgainstPartyName"); 
    xmlserializer.text(data.getAgainstParty()); 
    xmlserializer.endTag("", "AgainstPartyName"); 

    xmlserializer.startTag("", "Stage"); 
    xmlserializer.text(data.getStages()); 
    xmlserializer.endTag("", "Stage"); 

    xmlserializer.startTag("", "NextDate"); 
    xmlserializer.text(data.getNext_date()); 
    xmlserializer.endTag("", "NextDate"); 


    xmlserializer.endTag("", "Record"); 
    xmlserializer.endTag("", "LawyerRecords"); 
    xmlserializer.endDocument(); 

    String strData=writer.toString(); 
    fos.write(strData.getBytes()); 
    fos.close(); 

    return writer.toString(); 


} 

該Xml現在給出一個輸出,如;

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<LawyerRecords> 
<Record> 
    <UID>gshs</UID> 
    <PrevDate>dhshsh</PrevDate> 
    <CourtName>shshd</CourtName> 
    <CaseNo>shsshhs</CaseNo> 
    <ForPartyName>sgffsdddvd ddhdhd ddf</ForPartyName> 
    <AgainstPartyName>sddhssh shshsd</AgainstPartyName> 
    <Stage>sgshdhdhsg ggggdhhhh</Stage> 
    <NextDate>20-2-2014</NextDate> 
</Record> 
</LawyerRecords> 
<LawyerRecords> 
    <Record> 
    <UID>suprito</UID> 
    <PrevDate>dhshsh</PrevDate> 
    <CourtName>shshd</CourtName> 
    <CaseNo>shsshhs</CaseNo><ForPartyName></ForPartyName> 
    <AgainstPartyName>sddhssh shshsd</AgainstPartyName> 
    <Stage>sgshdhdhsg ggggdhhhh</Stage> 
    <NextDate>20-2-2014</NextDate> 
    </Record> 
</LawyerRecords> 

和我期望的輸出是:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<LawyerRecords> 
<Record> 
    <UID>gshs</UID> 
    <PrevDate>dhshsh</PrevDate> 
    <CourtName>shshd</CourtName> 
    <CaseNo>shsshhs</CaseNo> 
    <ForPartyName>sgffsdddvd ddhdhd ddf</ForPartyName> 
    <AgainstPartyName>sddhssh shshsd</AgainstPartyName> 
    <Stage>sgshdhdhsg ggggdhhhh</Stage> 
    <NextDate>20-2-2014</NextDate> 
</Record> 

    <Record> 
    <UID>suprito</UID> 
    <PrevDate>dhshsh</PrevDate> 
    <CourtName>shshd</CourtName> 
    <CaseNo>shsshhs</CaseNo><ForPartyName></ForPartyName> 
    <AgainstPartyName>sddhssh shshsd</AgainstPartyName> 
    <Stage>sgshdhdhsg ggggdhhhh</Stage> 
    <NextDate>20-2-2014</NextDate> 
    </Record> 
</LawyerRecords> 

回答

0

您的每次創建的所有記錄xmlserializer.startTag("", "LawyerRecords");xmlserializer.endTag("", "LawyerRecords");這就是爲什麼你得到錯誤的輸出..

您必須添加LawyerRecords只在最初和結束標記而不是所有記錄。

,添加起始標記LawyerRecords當添加第一條記錄,並添加結束標記LawyerRecords加時最後一個記錄。

您可以按照以下方法解析XML。

1)SAX Parser

2)DOM Parser

3)XML Pull Parser

可以使用XmlSerializer用於生成XML。

這裏是Generate XML Code

+0

它沒有工作.... –

+0

我提供的XML output..please幫助.. [請檢查鏈接](http://pastebin.com/4MkVdHnT)i將 –

+0

@SupriyoBhattacherjee讓我看看你的完整源代碼 –