在xhtml文档中找到单个节点时遇到一些问题。 我正在XmlDocument中加载XHTML字符串,因为不允许使用HTML Agility Pack。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xhtmlContent);
在不同情况下,我需要搜索不同的节点。 例如
selectedNode = xmlDoc.SelectSingleNode("//*[@class='" + classText + "'][@title='" + titleText + "']");
返回第一个具有特殊类和特殊标题属性的节点,无论它是什么元素。一切正常!
但是在一种情况下,我需要获得具有特殊名称Attribute的特定元素类型“ input”。我尝试了几种不同的XPATH,但是经过Google Research之后,应该可以这样做。但是事实并非如此,而且包括我在内的公司中的某些人员也不知道为什么它应该起作用...
selectedNode = xmlDoc.SelectSingleNode("//input[@name='" + nameText + "']");
我无法选择完整路径,因为<form>
内部的xhtml结构可能不同。
这是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="" />
但是它总是返回null。
如果我运行此在XPATH Tester中,一切正常,我得到正确的input
元素。只是在代码中不起作用。
任何想法都受到高度赞赏!
[更新#1]
试图将默认名称空间设置为xhtml元素
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("", xmlDoc.DocumentElement.NamespaceURI);
XmlDocument中的 DefaultNameSpace
现在是http://www.w3.org/1999/xhtml
,我猜应该是正确的。
但是所有这些测试仍然返回null。
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);