При анализе html нужно ли следить за самозакрывающимися тегами, которые не нуждаются в солидусе с закрывающим тегом? - PullRequest
0 голосов
/ 07 июля 2019

В HTML есть определенные теги, которые можно закрывать самостоятельно без солидуса. Например:

<link rel="shortcut icon" href="//www.google.com/favicon.ico">

действует. Таким образом, это не нужно:

<link rel="shortcut icon" href="//www.google.com/favicon.ico"/>

или

<link rel="shortcut icon" href="//www.google.com/favicon.ico">foo</link>

С этими обозначенными тегами, которые не нуждаются в солидусе, предположим, что я сталкиваюсь:

<link rel="shortcut icon" href="//www.google.com/favicon.ico">

Могу ли я предположить, что соответствующий </link> отсутствует, или мне нужно будет проанализировать остальную часть документа и определить это для себя?

1 Ответ

2 голосов
/ 07 июля 2019

Я понимаю, что HTML-спецификация - довольно пугающий документ.Но я думаю, что это поможет вам, по крайней мере, прочитать обзор об элементах , перейдя по любым ссылкам, которые кажутся актуальными.

В частности, вы увидите, что <link> является пустым элементом , о котором в этом разделе говорится:

Пустые элементы имеют только начальный тег;Конечные теги не должны указываться для пустых элементов.

Так что ваш второй пример, в котором текст foo представляется содержимым элемента, на самом деле обманчив.Элемент уже закрыт до того, как встретится текст, поэтому текст является содержимым родительского элемента (если это возможно).Явный закрывающий тег является ошибкой, и его следует игнорировать.

Хотя пустые элементы не требуют самозакрывающегося в HTML5, они действительно должны быть самозакрывающимися в XHTML, поэтому обычно можно увидеть <…/> синтаксис.


Примечание: (следующее было написано, когда у меня сложилось впечатление, что нужен точный анализатор HTML. Но я оставлю его на месте, хотяэто может показаться немного агрессивным, потому что я думаю, что у него есть несколько общих советов для людей, которые (пытаются) писать HTML-парсеры.)

Я знаю, что упомянутый стандарт - это массивный документиногда запутанный, и всегда сложный.Это делает написание HTML-парсера сложной задачей.Но нет коротких путей.Если вы хотите написать совместимый синтаксический анализатор, вы должны прочитать стандарт.Если вас не очень заботит соответствие, вам не следует спрашивать, какие конструкции соответствуют (но тогда вы теряете право жаловаться на создателей контента, которые создают несовместимый HTML).

Существуют парсеры с открытым исходным кодомКроме того, как библиотеки, поэтому нет необходимости писать новую.С другой стороны, ничто не научит вас больше этой задаче, чем написание парсера, и я уважаю любого, кто готов это сделать.Я не думаю, что это проект, который я бы взял на данный момент.Если вы хотите этого, начните с чтения стандарта.Кроме того, рассмотрите возможность присоединения к соответствующим спискам рассылки или, по крайней мере, после некоторых обсуждений.И удачи!

PS: Другим полезным ресурсом является документация Mozilla Developer Network (MDN), ссылка на которую содержится в документе WHATWG.См., Например, его главу об элементе <link> , в частности, о разделе технических характеристик.

...