Как анализировать xml с помощью jquery $.parseXML?

#javascript #jquery #xml #xml-parsing #parsexml

#javascript #jquery #xml #xml-синтаксический анализ #parsexml

Вопрос:

У меня мало опыта в разборе XML-документов, поэтому, пожалуйста, потерпите меня. В течение последних нескольких дней я изо всех сил пытаюсь проанализировать образец xml, приведенный ниже!

После поиска в Интернете и чтения других комментариев я пришел к выводу, что лучший способ — использовать $parseXML для того типа xml, с которым я имею дело.

Я проверил xml и использовал следующий код, но я продолжаю получать недопустимый xml! Моя цель — получить все строковые значения, принадлежащие одному <dict> , и использовать их внутри <tr> . Поэтому я признателен, если эксперт поможет мне исправить этот неработающий код.

Именно так я хочу поместить ключевые значения внутри div:

 var div = "<tr id="" i "">n"  
"<td>" i "</td>n"  
"<td><img src=""  categoryIcon  "" height="42" width="42"></td>n"  
"<td>n"  
"<a href="javascript:doit('id="   id   "amp;name="   name   "amp;category="   category   "amp;categoryIcon="   categoryIcon   "','"  country  "')" onclick="selectLink(this);">"   name   "</a><br> n"  
"<br></td></tr>nn";

$("#myDiv").append(div);
  

javascript :

 <html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
function myfunction(){
alert("me here");

var xml='<?xml version="1.0" encoding="UTF-8"?> <dict><key>ItemLists</key> <array><dict><key>id</key> <string>1</string> <key>name</key> <string>fruits</string> <key>category</key> <string>US Fruits</string> <key>categoryIcon</key> <string>http://www.somsite.com/categories/1.jpg</string> <key>country</key> <string>US</string> </dict> <dict><key>id</key> <string>2</string> <key>name</key> <string>Vegetable</string> <key>category</key> <string>Eu Vegetable</string> <key>categoryIcon</key> <string>http://www.somsite.com/categories/2.jpg</string> <key>country</key> <string>EU</string> </dict> </array> </dict>';
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc ); 




$($xml).each(function(){

//alert($(this).find("dict>string").text());
//alert($(this).find("dict>key").text());
alert($(this).find("dict>categoryIcon>string").text());
});

};
</script>
</head>
<body>
<button onclick="myfunction()">parse</button> 
</body>
</html>
  

xml для анализа:

 <?xml version="1.0" encoding="UTF-8"?>
<dict><key>ItemLists</key>
<array><dict><key>id</key>
<string>1</string>
<key>name</key>
<string>fruits</string>
<key>category</key>
<string>US Fruits</string>
<key>categoryIcon</key>
<string>http://www.somsite.com/categories/1.jpg</string>
<key>country</key>
<string>US</string>
</dict>

<dict><key>id</key>
<string>2</string>
<key>name</key>
<string>Vegetable</string>
<key>category</key>
<string>Eu Vegetable</string>
<key>categoryIcon</key>
<string>http://www.somsite.com/categories/2.jpg</string>
<key>country</key>
<string>EU</string>
</dict>

</array>
</dict>
  

Ответ №1:

     <script>
    function myfunction() {
        alert("me here");
        var xml = '<?xml version="1.0" encoding="UTF-8"?> <dict><key>ItemLists</key> <array><dict><key>id</key> <string>1</string> <key>name</key> <string>fruits</string> <key>category</key> <string>US Fruits</string> <key>categoryIcon</key> <string>http://www.somsite.com/categories/1.jpg</string> <key>country</key> <string>US</string> </dict> <dict><key>id</key> <string>2</string> <key>name</key> <string>Vegetable</string> <key>category</key> <string>Eu Vegetable</string> <key>categoryIcon</key> <string>http://www.somsite.com/categories/2.jpg</string> <key>country</key> <string>EU</string> </dict> </array> </dict>';
        xmlDoc = $.parseXML(xml),
        $xml = $(xmlDoc);

        $.each($xml.find('dict string'), function () {
            console.info($(this).text());
        });
    }
    </script>
  

Или вы также можете сделать это в each инструкции $xml.find('dict>array dict string')

Комментарии:

1. Спасибо за помощь. Я знаю, что в Firefox это не работает, но работает в Chrome? Как я могу получить отдельные значения ключей вместо всех имен ключей. Например, мне нужны значения для следующих ключей name, categoryIcon, который является растительным и somsite.com/categories/2.jpg ? Я пробовал так, но ничего не вышло: $.each($xml.find(‘dict> categoryIcon>string’), function () {

2. ваш xml структурирован неправильно, вы должны сгруппировать <key> <string> его в элементе. Что-то вроде этого: <data><key>id</key><string>1</string></data> с этим вы можете просто захватить все данные, а затем искать ключ и строку, если это необходимо. Что-то вроде этого: $.each($xml.find('dict>data'), function () { var keyText = $(this).find('key').text(); var stringText = $(this).find('string').text(); });

3. ну, xml — это то, как я его получаю, я не знаю, как изменить его структуру на стороне сервера. Итак, вы говорите, что нет способа получить ключевые значения для каждого dict? Моя цель — получить отдельные имена ключей и соответствующие им значения, чтобы я печатал их в html

4. Есть. Я вернусь к этому позже, когда вернусь домой.

5. Я хочу распечатать каждый набор значений dict-ключа (значение строки) как один <tr>, как я показал в своем первом сообщении. Использование dict>string выводит строковые значения отдельно как напечатать значение каждой строки dict сразу внутри <tr> ?