在javascript中读取自闭标记的问题

时间:2018-03-16 14:34:17

标签: javascript

当使用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 - 无结束日期

1 个答案:

答案 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