代码之家  ›  专栏  ›  技术社区  ›  Mohammed Hablullah

如何在jquery中获取与数组值相关的特定XML数据

  •  0
  • Mohammed Hablullah  · 技术社区  · 4 年前

    我有一个xml值数据和文本标签。其中我需要列出具体的值及其相应的文本。具体值在数组中提及。

    xml

    <menu>
    <variant>
        <value>1</value>
        <text>12 pa</text>
    </variant>
    <variant>
        <value>2</value>
        <text>30 pa</text>
    </variant>
    <variant>
        <value>3</value>
        <text>40 pa</text>
    </variant>
    <variant>
        <value>4</value>
        <text>50 pa</text>
    </variant>
    </menu>
    

    我的阵列

    var arr = ["1", "2", "4"]

    所有这些都要用jquery编码

    0 回复  |  直到 4 年前
        1
  •  0
  •   poorly-written-code    4 年前

    这可能不是最有效的方法,但您可以将xml视为字符串并对其进行拆分和解析。

    https://jsfiddle.net/an14zo2p/

    let xml = `<menu>
        <variant>
            <value>1</value>
            <text>12 pa</text>
        </variant>
        <variant>
            <value>2</value>
            <text>30 pa</text>
        </variant>
        <variant>
            <value>3</value>
            <text>40 pa</text>
        </variant>
        <variant>
            <value>4</value>
            <text>50 pa</text>
        </variant>
        </menu`.replace(/[\n\t]/g, ''); //remove new lines and tabs
    
    let arr = xml.split('<value>');        
    arr.shift(); //arr[0] is blank
    
    $.each(arr, function(index, variant) {
        arr[index] = {
        text: variant.substring(variant.indexOf('<text>') + 6, variant.indexOf('</text>')),
        value: variant.substr(0, variant.indexOf('</value>'))
      };
    });
    
    document.write(JSON.stringify(arr));
    console.log(arr);
    
        2
  •  0
  •   Mohammed Hablullah    4 年前

    以下代码将运行

    $("#variant_model").empty()
    
                    var data = response1.results[1][0].Variant;
                    var arrdata = data.split(';');
                    arrdata.shift();
                    function loadfail() {
                        alert("Error: Failed to Load Menu Data : XML");
                    }
                    $.ajax({
                        url: '/Prueba/FCD/menudata/menu.xml',
                        success: menu,
                        error: loadfail
                    });
                    console.log(arrdata);
    
                    function menu(document) {
                        var array2 = arrdata;
                        var array1 = []
                        $(document).find("variant").each(function () {
                            var text = $(this).find('text').text();
                            var value = $(this).find('value').text();
                            var combo = { text, value }
                            array1.push(combo)
                        })
                        array1 = array1.filter(function (item) {
                            return array2.includes(item.value);
                        })
    
                        array1.forEach(function (item) {
                            $("#variant_model").append($("<option></option>").val(item.value).html(item.text));
                        })
                        $('#variant_model option[value="' + response.item[0][0].Variant + '"]').attr('selected', true);
    
                    }