提问人:Relax 提问时间:10/25/2018 最后编辑:Relax 更新时间:10/25/2018 访问量:261
无法使用 xpath 在 xhtml 文档中找到 <input> 元素
Can't find <input> element in xhtml document using xpath
问:
我在 xhtml 文档中查找单个节点时遇到了一些问题。 我在 XmlDocument 中加载 XHTML 字符串,因为不允许使用 HTML Agility Pack。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xhtmlContent);
在不同的情况下,我需要搜索不同的节点。 例如
selectedNode = xmlDoc.SelectSingleNode("//*[@class='" + classText + "'][@title='" + titleText + "']");
向我返回第一个具有特殊类和特殊标题属性的节点,无论它是什么元素。这工作得很好!
但是在一种情况下,我需要获取具有特殊名称属性的特定元素类型“input”。我已经尝试了几种不同的XPATH,但是经过一些Google研究之后,这应该可以做到。但事实并非如此,我公司里的一些人,包括我,都不知道为什么根据定义它应该起作用......
selectedNode = xmlDoc.SelectSingleNode("//input[@name='" + nameText + "']");
我无法选择完整路径,因为里面的 xhtml 结构体可能不同。
这是 XHTML 文档的一部分:<form>
<?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);
DefaultNameSpace
在 XmlDocument 中现在是我猜应该是正确的。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);
答: 暂无答案
评论
'