Почему XmlDocument.GetElementById всегда возвращает ноль?
У меня есть некоторый XML (действительный XHTML), который выглядит так:
<html>
<head>
<script type="text/javascript">
<![CDATA[
function change_header(){
document.getElementById("myHeader").innerHTML="Nice day!";
}]]>
</script>
</head>
<body>
<h1 id="myHeader">Hello World!</h1>
<button onclick="change_header()">Change text</button>
</body>
</html>
И я пытаюсь получить #myHeader
использование узла docment.GetElementById("myHeader")
но всегда возвращается null
, Зачем?
Я предполагаю, что это не признает id
атрибут в качестве атрибута id без DTD или что-то? Если это так, как я могу заставить его использовать HTML DTD?
1 ответ
Решение
Это потому, что XmlDocument ничего не знает о том, что id
средства. Вам необходимо включить DTD в ваш документ XHTML. Просто поместите следующее в начало вашего HTML-файла:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Пример:
string html = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><html><body><div id=""foo"">some content</div></body></html>";
XmlDocument document = new XmlDocument();
document.LoadXml(html);
XmlElement div = document.GetElementById("foo");
Обратите внимание, что это может быть немного медленнее, потому что DTD необходимо загрузить.