我正在查询Microsoft Office SharePoint Server搜索服务,以将一些结果写入Web部件。我的查询工作正常但是在通过JQuery解析xml响应时遇到了一些麻烦。
以下是XML响应
<ResponsePacket xmlns="urn:Microsoft.Search.Response">
<Response domain="QDomain">
<Range>
<StartAt>1</StartAt>
<Count>1</Count>
<TotalAvailable>1</TotalAvailable>
<Results>
<Document xmlns="urn:Microsoft.Search.Response.Document">
<Action>
<LinkUrl fileExt="aspx">https://mysite.domain.inc:443/Person.aspx?guid=4A4F27E2 9C99 4866 BB08 DE494475A4E7</LinkUrl>
</Action>
<Properties xmlns="urn:Microsoft.Search.Response.Document.Document">
<Property>
<Name>TITLE</Name>
<Type>String</Type>
<Value>Smith, Joseph</Value>
</Property>
<Property>
<Name>RANK</Name>
<Type>Int64</Type>
<Value>873</Value>
</Property>
<Property>
<Name>SIZE</Name>
<Type>Int64</Type>
<Value>0</Value>
</Property>
<Property>
<Name>DESCRIPTION</Name>
<Type>String</Type>
<Value>Hi guys!</Value>
</Property>
<Property>
<Name>WRITE</Name>
<Type>DateTime</Type>
<Value>2009 07 31T03:00:24 04:00</Value>
</Property>
<Property>
<Name>PATH</Name>
<Type>String</Type>
<Value>https://mysite.domain.inc:443/Person.aspx?guid=4A4F27E2 9C99 4866 BB08 DE494475A4E7</Value>
</Property>
<Property>
<Name>JOBTITLE</Name>
<Type>String</Type>
<Value>Programmer</Value>
</Property>
</Properties>
</Document>
</Results>
</Range>
<Status>SUCCESS</Status>
</Response>
</ResponsePacket>
我正在尝试使用JQuery获得TITLE,即Smith,Joseph和JOBTITLE,即程序员。
我开始时:
$(xml).find('Properties').each(function(){
//not sure how to get the ones I want, use an indexer?
});
答案 0 :(得分:4)
像
这样的东西var title;
var jobTitle;
$('Property Name', 'Properties').each(function() {
var $this = $(this);
if ($this.text() === "TITLE") {
title = $this.nextAll("Value").text();
}
if ($this.text() === "JOBTITLE") {
jobTitle = $this.nextAll("Value").text();
}
});
return {
"title" : title,
"jobTitle" : jobTitle
}
这是您的XML的 Working Demo 。
修改强>
如评论中所述,我假设XML是文档的一部分。如果XML不是文档的一部分,则更改以下行
$('Property Name', 'Properties').each(function() { ...
到
$('Property Name', xml).each(function() {
其中xml
是服务xml响应。
答案 1 :(得分:3)
这些教程看起来不错:jQuery and XML revisited,Reading XML with jQuery。
如果您能够将数据作为JSON(JavaScript Object Notation)获取,那么在JavaScript中使用/操作数据会更容易。您可能会看到性能提升,具体取决于数据量。
答案 2 :(得分:2)
请尝试以下代码。
<script>
var xml = '<ResponsePacket xmlns="urn:Microsoft.Search.Response"> <Response domain="QDomain"> <Range> <StartAt>1</StartAt> <Count>1</Count> <TotalAvailable>1</TotalAvailable> <Results> <Document xmlns="urn:Microsoft.Search.Response.Document"> <Action> <LinkUrl fileExt="aspx">https://mysite.domain.inc:443/Person.aspx?guid=4A4F27E2 9C99 4866 BB08 DE494475A4E7</LinkUrl> </Action> <Properties xmlns="urn:Microsoft.Search.Response.Document.Document"> <Property> <Name>TITLE</Name> <Type>String</Type> <Value>Smith, Joseph</Value> </Property> <Property> <Name>RANK</Name> <Type>Int64</Type> <Value>873</Value> </Property> <Property> <Name>SIZE</Name> <Type>Int64</Type> <Value>0</Value> </Property> <Property> <Name>DESCRIPTION</Name> <Type>String</Type> <Value>Hi guys!</Value> </Property> <Property> <Name>WRITE</Name> <Type>DateTime</Type> <Value>2009 07 31T03:00:24 04:00</Value> </Property> <Property> <Name>PATH</Name> <Type>String</Type> <Value>https://mysite.domain.inc:443/Person.aspx?guid=4A4F27E2 9C99 4866 BB08 DE494475A4E7</Value> </Property> <Property> <Name>JOBTITLE</Name> <Type>String</Type> <Value>Programmer</Value> </Property> </Properties> </Document> </Results> </Range> <Status>SUCCESS</Status> </Response> </ResponsePacket>';
$(document).ready(
function()
{
var title, jobTitle;
$(xml).find('Property > Name').each(
function()
{
$name = $(this);
if($name.text() === 'TITLE')
title = $name.parent().find('value').text();
if($name.text() === 'JOBTITLE')
jobTitle = $name.parent().find('value').text();
}
);
alert(title);
alert(jobTitle);
}
);
</script>
答案 3 :(得分:1)
我非常接近于使用纯粹的选择器 - $(xml).find("Name:contains(TITLE)").nextAll("Value").text()
,但是因为你想要头衔和作业标题,它就破了。
无论如何,我认为我会把我的解决方案放在那里,因为它有点不同 - 主要的想法是,如果获得任何密钥只有1。
function getValue(children, key) {
var ret;
children.find("Name").each(function() {
if($(this).text() == key) {
ret = $(this).nextAll("Value").text();
return;
}
});
return ret;
}
var children = $(xml).find("Property");
var name = getValue(children, "TITLE");
var jobTitle = getValue(children, "JOBTITLE");
答案 4 :(得分:0)
是否有一个选项允许您将项目取回JSON
而不是?