0

サーバーに外部呼び出しを行い、XML(HTTPResponse)を返しています。次に、DOMパーサーを使用してアイテムのリストを取得します。アイテムのリストをDataTable/DataListに追加するにはどうすればよいですか?

XML構造をクラス自体のSalesforce構造に解析するにはどうすればよいですか?

ありがとうございました

こんにちはeyesscream。1つを除いて、すべてが正常に機能しています。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ページでは、結果が複製されます。なんで?

4

1 に答える 1

1

複数のパラメーターを格納する必要がある場合は、XML を使用してラッパー オブジェクトの文字列のリストに要素を追加します。次に、そのようなリストを dataTable、pageBlockTable、repeat などのタグに問題なく割り当てることができます。これらのタグが標準の sObject でのみ機能するわけではありません。

チェックボックスを含む文字列の単純なリストの場合、ヘルパー クラスは必要ありません。

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>
于 2012-11-05T22:21:02.790 に答える