Не удается найти элемент <input>в документе xhtml с использованием xpath - PullRequest
0 голосов
/ 25 октября 2018

У меня возникли проблемы с поиском одного узла в моем документе 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">&#160;</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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...