不使用标记名称(XML)计算子节点数

时间:2016-12-04 08:00:35

标签: xml xml-parsing

我正在研究一种通用的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>

2 个答案:

答案 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();
}