解析xml以基于具有相同的子元素值对多个子元素进行分组?
我试图解析一个XML文件,该文件是从我们的系统生成的,其中生成了多个子元素,但它们“在一起”,因为它们有一个相同的子元素 为了理解我粘贴在下面的部分xml代码 每个记录由其订单标识,然后包含该批货物的信息,最后列出该订单的单个项目及其规格解析xml以基于具有相同的子元素值对多个子元素进行分组?,xml,xml-parsing,Xml,Xml Parsing,我试图解析一个XML文件,该文件是从我们的系统生成的,其中生成了多个子元素,但它们“在一起”,因为它们有一个相同的子元素 为了理解我粘贴在下面的部分xml代码 每个记录由其订单标识,然后包含该批货物的信息,最后列出该订单的单个项目及其规格 <forward_agent> <record> <order>562490</order> <mfg._del_date>11-19-2008</mfg._de
<forward_agent>
<record>
<order>562490</order>
<mfg._del_date>11-19-2008</mfg._del_date>
<forw.agent>263</forw.agent>
<customer>120</customer>
<name>BLUEBERRY AUBURN HILLS</name>
<item>'28.1461.00</item>
<ordered>1.0000</ordered>
<warehouse>001</warehouse>
<desitnation_city_state>AUBURN HILLS MI</desitnation_city_state>
<weight>60.1201</weight>
<size>9.70</size>
</record>
<record>
<order>562490</order>
<mfg._del_date>11-19-2008</mfg._del_date>
<forw.agent>263</forw.agent>
<customer>120</customer>
<name>BLUEBERRY AUBURN HILLS</name>
<item>'545</item>
<ordered>1.0000</ordered>
<warehouse>002</warehouse>
<desitnation_city_state>AUBURN HILLS MI</desitnation_city_state>
<weight>82.0120</weight>
<size>12.86</size>
</record>
<record>
<order> </order>
<mfg._del_date> </mfg._del_date>
<forw.agent> </forw.agent>
<customer> </customer>
<name> </name>
<item>'</item>
<ordered> </ordered>
<warehouse> </warehouse>
<desitnation_city_state>Total Lbs:</desitnation_city_state>
<weight>1658.1342</weight>
<size>199.36</size>
</record>
<record>
<order>562136</order>
<mfg._del_date>11-19-2008</mfg._del_date>
<forw.agent>263</forw.agent>
<customer>133</customer>
<name>BLUEBERRY ALBUQUERQUE</name>
<item>'4635</item>
<ordered>2.0000</ordered>
<warehouse>002</warehouse>
<desitnation_city_state>EL PASO TX</desitnation_city_state>
<weight>23.9863</weight>
<size>4.00</size>
</record>
<record>
<order>562136</order>
<mfg._del_date>11-19-2008</mfg._del_date>
<forw.agent>263</forw.agent>
<customer>133</customer>
<name>BLUEBERRY ALBUQUERQUE</name>
<item>'5590</item>
<ordered>1.0000</ordered>
<warehouse>002</warehouse>
<desitnation_city_state>EL PASO TX</desitnation_city_state>
<weight>0.0000</weight>
<size>0.00</size>
</record>
<record>
<order>562136</order>
<mfg._del_date>11-19-2008</mfg._del_date>
<forw.agent>263</forw.agent>
<customer>133</customer>
<name>BLUEBERRY ALBUQUERQUE</name>
<item>'5591</item>
<ordered>1.0000</ordered>
<warehouse>002</warehouse>
<desitnation_city_state>EL PASO TX</desitnation_city_state>
<weight>436.0082</weight>
<size>96.67</size>
</record>
<record>
<order> </order>
<mfg._del_date> </mfg._del_date>
<forw.agent> </forw.agent>
<customer> </customer>
<name> </name>
<item>'</item>
<ordered> </ordered>
<warehouse> </warehouse>
<desitnation_city_state>Total Lbs:</desitnation_city_state>
<weight>5093.0928</weight>
<size>613.88</size>
</record>
最终,我可以根据总重量和尺寸或某个特定项目来整理订单
---编辑---
现在显示输入框,但它们没有填充任何内容
当前js代码
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "b2.xml",
dataType: "xml",
success: function(response) { parseXML(response); }
});
});
var recordList =[];
function parseXML(xml) {
$(xml).find('record').each(function () {
var entry = new Object();
entry.order= $(this).find('order').text();
entry.delDate= $(this).find('mfg._del_date').text();
entry.forw = $(this).find('forw.agent').text();
entry.customer= $(this).find('customer').text();
//
//
recordList.push(entry);
});
send(); // handles xml after parsed
}
function send(){
// for each row of a table
for(var i = 0; i < $("#table tr").size(); i++){
$('#orderNum' + i).val(recordList[i].order);
$('#delDate' + i).val(recordList[i].delDate);
$('#forw' + i).val(recordList[i].forw);
$('#customer' + i).val(recordList[i].customer);
}
}
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="parser.js"></script>
</head>
<body>
<table>
<tr>
<td>Order #</td>
<td>Delete Date</td>
<td>Forward</td>
<td>Customer</td>
</tr>
<tr>
<td><input id="orderNum0" type="text" /></td>
<td><input id="delDate0" type="text" /></td>
<td><input id="forw0" type="text" /></td>
<td><input id="customer0" type="text" /></td>
</tr>
</table>
</body>
</html>
$(文档).ready(函数()
{
$.ajax({
键入:“获取”,
url:“b2.xml”,
数据类型:“xml”,
成功:函数(响应){parseXML(响应);}
});
});
var记录列表=[];
函数解析xml(xml){
$(xml).find('record').each(函数(){
var entry=新对象();
entry.order=$(this.find('order').text();
entry.delDate=$(this.find('mfg.'u del_date').text();
entry.forw=$(this.find('forw.agent').text();
entry.customer=$(this.find('customer').text();
//
//
记录列表。推送(输入);
});
send();//解析后处理xml
}
函数send(){
//对于表的每一行
对于(var i=0;i<$(“#table tr”).size();i++){
$('#orderNum'+i).val(记录列表[i].order);
$('#delDate'+i).val(记录列表[i].delDate);
$('#forw'+i).val(记录列表[i].forw);
$('#customer'+i).val(记录列表[i].customer);
}
}
当前html代码
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "b2.xml",
dataType: "xml",
success: function(response) { parseXML(response); }
});
});
var recordList =[];
function parseXML(xml) {
$(xml).find('record').each(function () {
var entry = new Object();
entry.order= $(this).find('order').text();
entry.delDate= $(this).find('mfg._del_date').text();
entry.forw = $(this).find('forw.agent').text();
entry.customer= $(this).find('customer').text();
//
//
recordList.push(entry);
});
send(); // handles xml after parsed
}
function send(){
// for each row of a table
for(var i = 0; i < $("#table tr").size(); i++){
$('#orderNum' + i).val(recordList[i].order);
$('#delDate' + i).val(recordList[i].delDate);
$('#forw' + i).val(recordList[i].forw);
$('#customer' + i).val(recordList[i].customer);
}
}
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="parser.js"></script>
</head>
<body>
<table>
<tr>
<td>Order #</td>
<td>Delete Date</td>
<td>Forward</td>
<td>Customer</td>
</tr>
<tr>
<td><input id="orderNum0" type="text" /></td>
<td><input id="delDate0" type="text" /></td>
<td><input id="forw0" type="text" /></td>
<td><input id="customer0" type="text" /></td>
</tr>
</table>
</body>
</html>
命令#
删除日期
向前地
顾客
以下是一个屏幕截图:
Record.js
$(document).ready(function(){
$.ajax({
type: "GET",
url: "record.xml",
dataType: "xml",
success: function(xml){
parseXML(xml);
},
error: function(response, textStatus, errorThrown){
console.log(textStatus, errorThrown);}
});
});
var recordList =[];
function parseXML(xml) {
$(xml).find('record').each(function () {
var entry = new Object();
entry.order= $(this).find('order').text();
entry.delDate= $(this).find('mfg').text();
entry.forw = $(this).find('forw').text();
entry.customer = $(this).find('customer').text();
entry.name = $(this).find('name').text();
entry.item = $(this).find('item').text();
entry.ordered = $(this).find('ordered').text();
entry.warehouse = $(this).find('warehouse').text();
entry.destination = $(this).find('desitnation_city_state').text();
entry.weight = $(this).find('weight').text();
entry.size = $(this).find('size').text();
recordList.push(entry);
});
send(); // handles xml after parsed
}
function send(){
// for each row of a table
addRows();
for(var i = 0; i < recordList.length; i++){
$('#orderNum' + i).val(recordList[i].order);
$('#delDate' + i).val(recordList[i].delDate);
$('#forw' + i).val(recordList[i].forw);
$('#customer' + i).val(recordList[i].customer);
$('#name'+i).val(recordList[i].name);
$('#item'+i).val(recordList[i].item);
$('#ordered'+i).val(recordList[i].ordered);
$('#warehouse'+i).val(recordList[i].warehouse);
$('#destination'+i).val(recordList[i].destination);
$('#weight'+i).val(recordList[i].weight);
$('#size'+i).val(recordList[i].size);
}
}
function addRows(){
for(var i = 1; i < recordList.length; i++){
var newField = "<tr><td><input id=\"orderNum"+i+"\" size=\"10\" type=\"text\" </td>"+
"<td><input id=\"delDate"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"forw"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"customer"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"name"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"item"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"ordered"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"warehouse"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"destination"+i+"\" type=\"text\"</td>"+
"<td><input id=\"weight"+i+"\" size=\"10\" type=\"text\"</td>"+
"<td><input id=\"size"+i+"\" size=\"10\" type=\"text\"</td></tr>"
$('#tableId').append(newField);
}
}
$(文档).ready(函数(){
$.ajax({
键入:“获取”,
url:“record.xml”,
数据类型:“xml”,
成功:函数(xml){
parseXML(xml);
},
错误:函数(响应、文本状态、错误抛出){
console.log(textStatus,errorshown);}
});
});
var记录列表=[];
函数解析xml(xml){
$(xml).find('record').each(函数(){
var entry=新对象();
entry.order=$(this.find('order').text();
entry.delDate=$(this.find('mfg').text();
entry.forw=$(this.find('forw').text();
entry.customer=$(this.find('customer').text();
entry.name=$(this.find('name').text();
entry.item=$(this.find('item').text();
entry.ordered=$(this.find('ordered').text();
entry.warehouse=$(this.find('warehouse').text();
entry.destination=$(this.find('desitnation\u city\u state')。text();
entry.weight=$(this.find('weight').text();
entry.size=$(this.find('size').text();
记录列表。推送(输入);
});
send();//解析后处理xml
}
函数send(){
//对于表的每一行
addRows();
对于(var i=0;i var newField=“那么对于列的打印,您可以按照自己的意愿处理它。您建议如何打印列?我尝试了:$('#output').append($(this).find('customer').text());但这并不是我想要它做的…我还在学习和实验你是在打印网页?还是在打印文档?我无法让它工作。我编辑了我的帖子,向你展示了我当前的代码。现在它只输出网页上的输入框,没有值填充它们。谢谢你的帮助。如果你有它的话,我会的st看不到它..它使用了很多jquery..另外,如果你在尝试所有这些时查看控制台,你应该能够遵循它并看到错误更改成功方法..参考我的代码我添加了ajax调用