Salesforce 向VisualForce数据表/列表添加外部XML

Salesforce 向VisualForce数据表/列表添加外部XML,salesforce,visualforce,Salesforce,Visualforce,我正在对服务器进行外部调用并返回XML(HTTPResponse)。然后,我使用DOM解析器获取项目列表。 如何将项目列表添加到DataTable/DataList 如何将XML结构解析为类本身中的Salesforce结构 多谢各位 嗨,眼睛尖叫。除了一件事,一切都很好。我需要深入学习XML Dom.XMLNode rootElement = doc.getRootElement(); for (Dom.XmlNode assets : rootElement.getChildElements(

我正在对服务器进行外部调用并返回XML(HTTPResponse)。然后,我使用DOM解析器获取项目列表。 如何将项目列表添加到DataTable/DataList

如何将XML结构解析为类本身中的Salesforce结构

多谢各位

嗨,眼睛尖叫。除了一件事,一切都很好。我需要深入学习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页面上,它复制结果。为什么?

如果需要存储多个参数,请检查XML,将元素添加到包装器对象的字符串列表中。然后可以将这样的列表分配给dataTable、pageBlockTable、repeat等标记,而不会出现任何问题。这些标记不仅仅适用于标准对象

对于带有复选框的字符串的简单列表,您甚至不需要任何帮助器类

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(){}
}
公共类StackXml{
public List allOptions{get;private set;}//这将保存用于VF页面的序列号。
//如果您不打算使用带有复选框的VF,简单的列表就足够了
公共列表所选选项{get;set;}
公共StackXml(){
allOptions=新列表();
selectedOptions=新建列表();
字符串xmlString='ver123ver456'+
“证明它的东西将被跳过”+
‘abc007’;
Dom.Document doc=新的Dom.Document();
文档加载(xmlString);
Dom.XMLNode rootElement=doc.getRootElement();
对于(Dom.XmlNode节点:rootElement.getChildElements()){
if(node.getName().trim()=='serialNumber'){
String text=node.getText().trim();
添加(新选择选项(文本,文本));
}
}
}
public void assign(){}
}



您已选择:

{!o}
非常感谢您的回复,但我不知道您的意思。能否发布一个XML解析代码示例。或者将示例从SF文档复制到您的沙箱中,并使用ti?
公共静态字符串演练(DOM.XMLNode节点){String result='\n';if(node.getNodeType()==DOM.XMLNodeType.ELEMENT){if(node.getName().trim()='serialNumber'){result+=node.getText().trim();}(DOM.XMLNode子节点:node.getChildElements()){result+=walkThrough(child);}返回结果;}返回“ERROR”;}
公共静态字符串解析(string-toParse){DOM.Document-doc=new-DOM.Document();尝试{doc.load(toParse);DOM.XMLNode root=doc.getRootElement();返回演练(根);}catch(System.XMLException e){return e.getMessage();}
对不起,太乱了。我有一个序列号列表,如ver123、ver345等。我的目标是在屏幕上显示这些序列号,旁边有复选框。我们可以用它去聊天室吗?可能更合适。。。
<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>