当使用javascript读取自我关闭标记时,输出会有所不同。
这是我在xml中的webservice输出:
<aryNotice>
<Notice>
<PlanStartDate>
3/20/2017 11:28:01 AM
</PlanStartDate>
<PlanEndDate />
<Location>
UK / City
</Location>
<SevLevel>
YELLOW
</SevLevel>
<SrvLev123>
Web Services
</SrvLev123>
<WebTitle />
<Weblink />
</Notice>
</aryNotice>
用于读取计划开始日期和结束日期的Javascript代码:
if(document.getElementsByTagName('PlanStartDate').length > 0) {newXML += 'Planned Dates: ' + document.getElementsByTagName('PlanStartDate')[i].textContent; }
if(document.getElementsByTagName('PlanEndDate').length > 0) {newXML+= ' - ' + document.getElementsByTagName('PlanEndDate')[i].textContent;}
else
{newXML+= ' No end date ';}
输出: 计划日期:2017年3月20日上午11:28:01 - 英国/ CityYELLOWWeb服务]]
我希望输出为计划日期:2017年3月20日上午11:28:01 - 无结束日期
答案 0 :(得分:0)
自终止标记语法对HTML解析器没有任何意义。它只是忽略标记中的/
并将其视为开始标记。然后,即使代码中没有结束标记,HTML解析器仍会在内存中构造一个。你可以在这里看到:
console.log(document.querySelector("testTag"));
<testTag />
如您所见,浏览器只是将其视为空元素。因此,当您尝试获取空元素的.textContent
时,您什么也得不到。
你的if
条件没有测试.textContent
,但他们正在测试元素的存在:
if(document.getElementsByTagName('PlanEndDate').length > 0)
并且,由于该元素确实存在,因此您的代码错误地输入了true
的{{1}}分支。
不幸的是,即使您修改了代码以测试if
,它仍然无法工作,因为HTML解析器将动态创建的结束标记放在所有其他内容之后,因此{{1}在开始标记成为自终止元素的.textContent.length
之后的所有内容。
您需要使用XML解析器来正确访问此内容,否则HTML解析器可以完成工作(正如您所知),它不知道如何处理XML语法
.textContent