2012-11-05 47 views
0

我正在對服務器進行外部調用並返回XML(HTTPResponse)。然後我使用DOM解析器來獲取項目列表。 如何將項目列表添加到DataTable/DataList?將外部XML添加到VisualForce數據表/列表

如何將XML結構解析爲類本身內的Salesforce結構?

謝謝

嗨eyesscream。除了一件事情之外,一切工作都很好。我需要深入XML

Dom.XMLNode rootElement = doc.getRootElement(); 
for (Dom.XmlNode assets : rootElement.getChildElements()) { 
    if (assets.getName().trim() == 'models') { 
     for (Dom.XmlNode asset : assets.getChildElements()) { 
      if (asset.getName().trim() == 'model') { 
       for (Dom.XmlNode serial : asset.getChildElements()) { 
        if (serial.getName().trim() == 'modelNumber') { 
         text = serial.getText().trim(); 
         allOptons.add(new SelectOption(text, text)); 
        } 
       } 
      } 
     } 
    } 
} 

在VF頁面上重複結果。爲什麼?

+0

我們可以去聊天室呢?可能更適合... http://chat.stackoverflow.com/rooms/19311/room-for-motti10-and-eyescream – eyescream

回答

1

如果您需要存儲多個參數,請通過XML將元素添加到包裝對象字符串列表。然後,這樣的列表可以分配給dataTable,pageBlockTable,repeat等標籤沒有任何問題。這不像這些標籤只適用於標準的sObjects。

有關複選框的簡單列表,您甚至不需要任何助手類。

public class StackXml{ 
    public List<SelectOption> allOptions {get;private set;} // this will hold serial numbers for use in VF page. 
    // if you wouldn't plan to use VF with checkboxes, simple List<String> would be enough 

    public List<String> selectedOptions {get;set;} 

    public StackXml(){ 
     allOptions = new List<SelectOption>(); 
     selectedOptions = new List<String>(); 

     String xmlString = '<serials><serialNumber>ver123</serialNumber><serialNumber>ver456 </serialNumber>' + 
      '<intrusion>something to prove it will be skipped</intrusion>' + 
      '<serialNumber>abc007</serialNumber></serials>'; 

     Dom.Document doc = new Dom.Document(); 
     doc.load(xmlString); 

     Dom.XMLNode rootElement = doc.getRootElement(); 
     for(Dom.XmlNode node : rootElement.getChildElements()){ 
      if(node.getName().trim() == 'serialNumber') { 
       String text = node.getText().trim(); 
       allOptions.add(new SelectOption(text, text)); 
      } 
     } 
    } 

    public void assign(){} 
} 

<apex:page controller="StackXml"> 
    <apex:form> 
     <apex:selectCheckboxes value="{!selectedOptions}" layout="pageDirection"> 
      <apex:selectOptions value="{!allOptions}"/> 
     </apex:selectCheckboxes> 
     <apex:commandButton value="Assign" action="{!assign}"/> 
    </apex:form> 
    <hr/> 
    <p>You have selected:</p> 
    <apex:dataList value="{!selectedOptions}" var="o">{!o}</apex:dataList> 
</apex:page> 
+0

非常感謝你的回覆,但我不確定你的意思。 – motti10

+0

您可以發佈您的XML解析代碼的示例。或者從SF文檔複製例子到你的沙箱,並試驗ti? – eyescream

+0

'public static String walkThrough(DOM.XMLNode node){String result ='\ n'; if(node.getNodeType()== DOM.XMLNodeType.ELEMENT){node.getName()。trim()=='serialNumber'){ result + = node.getText()。trim(); (DOM.XMLNode child:node.getChildElements()){ result + = walkThrough(child);} } 返回結果; } return'ERROR';}' – motti10