我正在使用jQuery进行POST,结果我得到了一个XML格式的响应:
<struct>
<member>
<name>ITEMS</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>item1</name>
<value>
<boolean>value1</boolean>
</value>
</member>
<member>
<name>item2</name>
<value>
<boolean>value2</boolean>
</value>
</member>
<member>
<name>item3</name>
<value>
<string>value3</string>
</value>
</member>
<member>
<name>item4</name>
<value>
<string>value4</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
</struct>
你能告诉我如何提取 item1 之前的布尔值( value1 )和字符串值( value3)前面的< EM>项目3 ?我知道我可以find('boolean')
和find('string')
然后接受我感兴趣的值,但我想是否有更优雅的方法(使用<标签<name>
)之间的em> items 。
修改 我有另一个问题,因为项目名称重复如此。
<struct>
<member>
<name>ITEMS</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>item1</name>
<value>
<boolean>value1</boolean>
</value>
</member>
<member>
<name>item2</name>
<value>
<boolean>value2</boolean>
</value>
</member>
<member>
<name>item3</name>
<value>
<string>value3</string>
</value>
</member>
<member>
<name>item4</name>
<value>
<string>value4</string>
</value>
</member>
</struct>
<struct>
<member>
<name>item1</name>
<value>
<boolean>value5</boolean>
</value>
</member>
<member>
<name>item2</name>
<value>
<boolean>value6</boolean>
</value>
</member>
<member>
<name>item3</name>
<value>
<string>value7</string>
</value>
</member>
<member>
<name>item4</name>
<value>
<string>value8</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
</struct>
当我运行@Rick Hitchcock find
函数时,我将所有值粘在一起,即find('item1','boolean')
返回&#34; value1value2&#34;。如何分离数据以将其放入对象中:
var myVector; // vector where I store my objects
myVector[0] = { // object with items from the first <struct> tag
item1: value1,
item2: value2,
item3: value3,
item4: value4
}
myVector[1] = { // object with items from the second <struct> tag
item1: value5,
item2: value6,
item3: value7,
item4: value8
}
etc...
答案 0 :(得分:1)
使用filter()
直接转到name
,然后next()
和find()
抓取数据:
var bool= $('name').filter(function() {
return $(this).text()=='item1';
}).next().find('boolean').text();
var str= $('name').filter(function() {
return $(this).text()=='item3';
}).next().find('string').text();
你可以把它变成一个函数:
function find(name, type) {
return $('name').filter(function() {
return $(this).text()==name;
}).next().find(type).text();
}
console.log(find('item1', 'boolean')); //value1
console.log(find('item3', 'string')); //value3
根据您更新的问题,您可以使用此功能:
function find(name, type, vector) {
$('name')
.filter(function() {
return $(this).text()==name;
})
.next()
.find(type).each(function(idx) {
vector[idx]= vector[idx] || {};
vector[idx][name]= $(this).text();
});
}
你会这样称呼它,将myVector
传递给函数:
var myVector = [];
find('item1', 'boolean', myVector);
find('item3', 'string', myVector);
function find(name, type, vector) {
$('name')
.filter(function() {
return $(this).text()==name;
})
.next()
.find(type).each(function(idx) {
vector[idx]= vector[idx] || {};
vector[idx][name]= $(this).text();
});
}
var myVector = [];
find('item1', 'boolean', myVector);
find('item3', 'string', myVector);
$('#output').html(JSON.stringify(myVector, null, 2));
&#13;
struct {
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="output"></pre>
<struct>
<member>
<name>ITEMS</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>item1</name>
<value>
<boolean>value1</boolean>
</value>
</member>
<member>
<name>item2</name>
<value>
<boolean>value2</boolean>
</value>
</member>
<member>
<name>item3</name>
<value>
<string>value3</string>
</value>
</member>
<member>
<name>item4</name>
<value>
<string>value4</string>
</value>
</member>
</struct>
<struct>
<member>
<name>item1</name>
<value>
<boolean>value5</boolean>
</value>
</member>
<member>
<name>item2</name>
<value>
<boolean>value6</boolean>
</value>
</member>
<member>
<name>item3</name>
<value>
<string>value7</string>
</value>
</member>
<member>
<name>item4</name>
<value>
<string>value8</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
</struct>
&#13;
答案 1 :(得分:0)
您可以在此XML上应用xPath。
//member[name='item1']/value/boolean/text() | //member[name='item3']/value/string/text()