Я пытаюсь проанализировать некоторые XML, хранящиеся в Интернете, а затем сохранить каждый родительский узел и его дочерние элементы через PHP.
В качестве теста я создал немного базового XML, так как он очень длинный.
У меня есть немного XML, с которым я пытаюсь добиться оснований.
<result>
<name>Person1</name>
<date>2002-05-16</date>
</result>
<result>
<name>Person2</name>
<date>2012-11-06</date>
</result>
Я хочу показать каждый результат отдельно в следующем html:
<body>
<p>XML Split</p>
<div id="contents"></div>
<div id="scroll"><input type="button" id="next" Value=" next in array "/>
<input type="button" id="previous" Value=" previous in array "/></div>
<div id="save"><input type="button" id="one" Value=" Save xml "/>
<input type="button" id="all" Value=" Save all xml "/></div>
<p>XML Split ended</p>
</body>
Для этого я использую следующий jQuery:
$(document).ready(function() {
$.ajax({
type: "GET",
url: "sampleContent.xml",
dataType: "xml",
data: ({'name': name, 'date': date}),
success: function(xml) {
parseXml(xml);
append();
}
});
});
var tmpName;
var tmpDate;
var results = [];
function parseXml(xml) {
$(xml).find('result').each(function() {
tmpName = $(this).find('name').text();
tmpDate = $(this).find('date').text();
output = $(this).val();
if (output != ''){
obj = {};
obj.name = name;
obj.date = date;
obj.output = output;
results.push(obj);
}
});
}
function append() {
$(results).each(function() {
$('#contents').append('<div id="record"><div class="name">' +
tmpName + '</div><div class="date">' +
tmpDate + '</div></div>');
});
}
Я пытаюсь отобразить данные XML при попытке создания массива. Мне также потребуется изменить некоторые переменные, которые используются в массиве, такие как дата из year- месяц-день → день-месяц-год.
Я не уверен, как и почему это происходит неправильно, поэтому я хотел бы получить любые предложения по созданию необходимого массива. Я пытаюсь использовать, как создать многомерный массив/объект в jquery и передать через пост AJAX в качестве примера, но все еще не так.
Любые предложения приветствуются.
благодаря
Дэн
Есть несколько вещей
result
на корневом уровне, find()
только находит потомковif (output != ''){...
никогда не будет правдой, поскольку элементы result
не имеют значения-
$(document).ready(function () {
$.ajax({
type: "GET",
url: "sampleContent.xml",
dataType: "xml",
data: {
name : name,
date : date
}
}).done(function(xml) {
$('<div />').append(xml).find('result').each(function () {
var record = $('<div />', {
id : 'record'
}),
name = $('<div />', {
'class' : 'name',
html : $(this).find('name').text()
}),
date = $('<div />', {
'class' : 'date',
html : $(this).find('date').text()
});
$('#contents').append( record.append(name, date) );
});
});
});
val()
получает значение, как в <input value="something" />
, а <result>
не имеет значения, поэтому val()
всегда будет возвращать пустую строку. Вы не ошиблись в создании массива, но вы итерируете, чтобы создать массив, затем вы итерируете, чтобы использовать массив, когда вы можете просто использовать значения сразу, массив на самом деле не нужен. Вы установили для dataType значение xml
, поэтому вам не нужен $.parseXML
, jQuery сделает это за вас, и done
будет done
же, как и success
, так что, надеюсь, это должно заменить ваш код. Попробуйте консольный журнал xml
на первой строке внутри done
?
В вашей функции append()
используйте значения из своего массива вместо использования tmpName
и tmpDate
$(results).each(function(i) {
$('#contents').append('<div id="record"><div class="name">' +
results[i].name + '</div><div class="date">' +
results[i].date + '</div></div>');
});
append()
используйте значения из вашего массива вместо использованияtmpName
иtmpDate