我正在研究一种通用的ASP.NET控件,可以在用户需要执行搜索时重用它。底层服务将调用存储过程,该过程将在五个或六个不同视图中的一个上运行选择。然后,sp将查询结果作为XML返回。
我遇到的问题是存储过程可以返回[n]列数,具体取决于正在执行的实际搜索(参见下面的两个示例)。我如何确定每条记录的子节点数?具体来说,我如何检查元素下的孩子数量?
XML Sample Number 1
<?xml version="1.0"?>
<NewDataSet>
<Table>
<ProjectContact>
<Id>1613</Id>
<ProjectNumber>216206</ProjectNumber>
<DisplayName>Scott Jones</DisplayName>
<IsProjectLead>true</IsProjectLead>
<ProjectNameLong>Facility Management</ProjectNameLong>
<Comment>Created from 1713</Comment>
<ScheduleNoteId>5</ScheduleNoteId>
<ScheduleComment>Travel/Work</ScheduleComment>
</ProjectContact>
</Table>
</NewDataSet>
XML Sample Number 2
<?xml version="1.0"?>
<NewDataSet>
<Table>
<DisplayName>David Wilson</DisplayName>
<Id>1691</Id>
<Department>Electrical Services</Department>
<OfficeName>Orlando</OfficeName>
</Table>
</NewDataSet>
答案 0 :(得分:0)
这取决于您使用的XML API,以及您是否使用空白保存来解析XML,但通常有几种方法,一种是XPath,您可以在其中使用count(*)
。 Table
元素用于查找子元素的数量。使用DOM并假设在加载时不保留空格,您也可以在选择.ChildNodes.Count
元素时读出Table
。使用LINQ to XML,您可以使用.Elements().Count()
和Table
元素作为上下文节点。
答案 1 :(得分:0)
那么JavaScript会是什么?我的问题是我的知识受限于XML Dom和Dom。我在获取第一个Table元素的引用然后抓住子元数时遇到了问题。
function executeSearch(){
var searchvalue = document.getElementById("test").value;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (xhttp.readyState == 4 && xhttp.status == 200) {
xmlResponse = xhttp.responseXML;
recordCount = xmlResponse.getElementsByTagName("Table").length;
if (recordCount > 0) {
}
}
};
xhttp.open("POST", "../../webservices/SearchDatabase.ashx?mode=contact&searchvalue=" + searchvalue, true);
xhttp.send();
}