Salesforce 向VisualForce数据表/列表添加外部XML
我正在对服务器进行外部调用并返回XML(HTTPResponse)。然后,我使用DOM解析器获取项目列表。 如何将项目列表添加到DataTable/DataList 如何将XML结构解析为类本身中的Salesforce结构 多谢各位 嗨,眼睛尖叫。除了一件事,一切都很好。我需要深入学习XMLSalesforce 向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(
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>