2017-04-25 105 views
0

列表從下面XML需要使用頂點代碼XML DOM解析到頂點

<users> 
<user> 
    <prop key="FirstName" value="Ramesh"/> 
    <prop key="lastName" value="Ramesh"/> 
    <prop key="DOB" value="29/03/1988"/> 
    <prop key="Mobile" value="12345678"/> 
    <prop key="Country" value="India"/> 
</user> 
<user> 
    <prop key="FirstName" value="Anil"/> 
    <prop key="lastName" value="Ramesh"/> 
    <prop key="DOB" value="29/03/1986"/> 
    <prop key="Mobile" value="12345678"/> 
    <prop key="Country" value="India"/> 
</user> 
</users> 

使用下面的代碼嘗試基於各自的鍵來獲取值,並添加將其轉換爲List<User>,但能不能找到

private String walkThrough(DOM.XMLNode node) { 
    String result = '\n'; 
    if (node.getNodeType() == DOM.XMLNodeType.COMMENT) { 
    return 'Comment (' + node.getText() + ')'; 
    } 
    if (node.getNodeType() == DOM.XMLNodeType.TEXT) { 
    return 'Text (' + node.getText() + ')'; 
    } 
    if (node.getNodeType() == DOM.XMLNodeType.ELEMENT) { 
    result += 'Element: ' + node.getName(); 
    if (node.getText().trim() != '') { 
     result += ', text=' + node.getText().trim(); 
    } 
    if (node.getAttributeCount() > 0) { 
     for (Integer i = 0; i< node.getAttributeCount(); i++) { 
     result += ', attribute #' + i + ':' + node.getAttributeKeyAt(i) + '=' + node.getAttributeValue(node.getAttributeKeyAt(i), node.getAttributeKeyNsAt(i)); 
     } 
    } 
    for (Dom.XMLNode child: node.getChildElements()) { 
     result += walkThrough(child); 
    } 
    return result; 
    } 
    return ''; //should never reach here 
} 

private String parse(String toParse) { 
    DOM.Document doc = new DOM.Document();  
    try { 
    doc.load(toParse);  
    DOM.XMLNode root = doc.getRootElement(); 
    return walkThrough(root); 

    } catch (System.XMLException e) { // invalid XML 
    return e.getMessage(); 
    } 
} 

有一些可以幫助我如何獲得基於上述XML使用DOM文檔的Key的價值?

回答

0

我基本上有同樣的問題。我的解決方案大致如下所示:

public with sharing class SG_WF_XML_PARSE_POC { 

    public User selectedUser { get; set; } 
    public String Field1{get; set;} 
    public String Label1{get; set;} 
    public String Field2{get; set;} 
    public String Label2{get; set;} 
    public String Field3{get; set;} 
    public String Label3{get; set;} 
    public String Field4{get; set;} 
    public String Label4{get; set;} 
    public String Field5{get; set;} 
    public String Label5{get; set;} 
    public String sObjectName { get; set; } 
    public List<String> FieldList {get; set;} 
    private Map<String, String> readxml; 
    private final Request_APAC__c reqs; 


    public SG_WF_XML_PARSE_POC(ApexPages.StandardController stdController) { 
     this.reqs = (Request_APAC__c)stdController.getRecord(); 
     System.debug('Initializing stdcontr: ' + ApexPages.currentPage().getParameters().get('id') + ' - ' + reqs); 
     Dom.Document doc = new Dom.Document(); 
     doc.load(reqs.XML_Store__c); 
     Dom.XMLNode env= doc.getRootElement(); 
     Field1 = env.getAttribute('field', 'Workflow'); 
     system.debug('root : '+env.getname()); 
     for (Dom.XmlNode node : doc.getRootElement().getChildElements()) { 
      String a1 = node.getname(); 
      system.debug('getname son attribute='+a1); 
      for (Dom.XmlNode node1 : node.getChildElements()) { 
       String a11 = node1.getname(); 
       String a111 = node1.gettext(); 
       if (node1.getname() == 'label') { 
        label1 = node1.gettext(); 
        label2 = node1.gettext(); 
        label3 = node1.gettext(); 
        label4 = node1.gettext(); 
       } 
       system.debug('gettext grandson attribute='+a11 + ' value=' + a111); 
      } 
     } 
     ... 
    } 
    ... 
}