У меня возникли проблемы с поиском одного узла в моем документе xhtml.Я загружаю строку XHTML в XmlDocument, потому что мне не разрешено использовать пакет Agility HTML.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xhtmlContent);
В разных случаях мне нужно искать разные узлы.Например,
selectedNode = xmlDoc.SelectSingleNode("//*[@class='" + classText + "'][@title='" + titleText + "']");
возвращает мне первый узел, который имеет специальный класс и специальный заголовок Attribute, независимо от того, какой это элемент.Это работает просто отлично!
Но в одном случае мне нужно получить определенный тип элемента 'input' со специальным именем Attribute.Я пробовал несколько разных XPATH, но после некоторых исследований Google это должно сделать.Но это не так, и некоторые люди в моей компании, включая меня, понятия не имеют, почему, поскольку по определению это должно работать ...
selectedNode = xmlDoc.SelectSingleNode("//input[@name='" + nameText + "']");
Я не могу выбрать полный путь, потому что структура xhtml внутри <form>
может быть разным.Это часть документа XHTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Online</title>
</head>
<body onload="javascript:setup();">
<form id="daten" action="{{{Intern_FORMACTION}}}" method="post">
<div>
<input name="Z0000" type="hidden" value="7" />
<input name="xt" type="hidden" value="" />
<input name="XE001" type="hidden" value="" />
<input name="XE002" type="hidden" value="" />
<input name="mv" type="hidden" value="1" />
<div class="tabBar">
<div class="tabBarContent">
<div class="block8"> </div>
</div>
</div>
</div>
</form>
</body>
</html>
Например, я хочу получить этот узел: <input name="XE001" type="hidden" value="" />
Но он всегда возвращает ноль.
Если я запускаю этотнапример, в XPATH Tester все работает, и я получаю правильный input
элемент.Это просто не работает в коде ..
Любые идеи высоко ценятся!
[ОБНОВЛЕНИЕ # 1]
Попытка установить пространство имен по умолчанию для элемента xhtml
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("", xmlDoc.DocumentElement.NamespaceURI);
DefaultNameSpace
в XmlDocument теперь http://www.w3.org/1999/xhtml
, что должно быть правильным, я думаю.
Однако все эти тесты по-прежнему возвращают ноль.
xmlDoc.SelectSingleNode("//input[@name='" + nameText + "']", nsmgr);
xmlDoc.SelectSingleNode("//html/input[@name='" + nameText + "']", nsmgr);
xmlDoc.SelectSingleNode("/html/input[@name='" + nameText + "']", nsmgr);
xmlDoc.SelectSingleNode("//html:input[@name='" + nameText + "']", nsmgr);