HTML не является XML, хотя они выглядят очень похоже; В HTML допустимы четыре вещи, которые вы не можете сделать с XML, и все они могут быть изменены для соответствия XML:
- Незакрытые теги, как вы обнаружили. Просто замените их закрытой версией -
<br>
на <br/>
и т. Д.
- Атрибуты без значений, например, в
<input type="checkbox" checked>
. Просто присвойте им значение с тем же именем, что и атрибут, т.е. <input type="checkbox" checked="checked" />
.
- Несоответствующие теги - это немного сложнее. Например, в HTML разрешено делать
<b>A<i>B</b>C</i>
, что делает A жирным шрифтом, C курсивом, а B жирным шрифтом и курсивом. Вы можете сделать этот XML-совместимый, выполнив <b>A<i>B</i></b><i>C</i>
или <b>A</b><i><b>B</b>C</i>
.
- Большинство лиц. Только
<
, >
, &
, "
, '
и значения Unicode (например,  
/  
) являются допустимыми объектами в XML. Вы не можете использовать
или ø
или что-то подобное по умолчанию. Чтобы это исправить, вам нужно добавить объявление сущности вверху листа, например <!ENTITY nbsp " ">
.
XSLT не способен обрабатывать файл HTML, если он не является действительным XML.
Как правило, я всегда пишу HTML для совместимости с XML просто потому, что он делает доступным весь спектр инструментов XML, и на самом деле нет причин не делать этого.
Замена <br>
на <br>
фактически заменяет тег на TEXT, который похож на html, а не на xml-совместимый тег.