<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<meta name="Generator"/>
</head>
<body>
<h1>My head 1</h1>
</body>
</html>
以上是我的XElement对象{.1}}的.ToString。看起来不错。
我正在尝试获取body的innerXml,但我的XPath返回null。
html
答案 0 :(得分:3)
每当使用名称空间时(在<html>
中),您需要在搜索节点时定义名称空间:
使用LINQ to XML
(在我看来,更容易和更清洁的解决方案)
// Create a XNamespace instance for the default namespace
XNamespace xhtml = "http://www.w3.org/1999/xhtml";
// Select the node using LINQ to XML
var bodyByLinq = doc.Element(xhtml + "html").Element(xhtml + "body");
使用XPath
// Create a namespace manager
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(new NameTable());
// Define your default namespace including a prefix to be used later in the XPath expression
namespaceManager.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");
// Select the node using XPath
var bodyByXPath = doc.XPathSelectElement("/xhtml:html/xhtml:body", namespaceManager);
更新:改进了我的答案,因为提供的示例不正确
答案 1 :(得分:0)
@zombiehunter是正确的,所以我给了他信用。
我也尝试过这种方式,我只是告诉XPath忽略命名空间。似乎也有效。
var notNullAnyMore = html.XPathSelectElement("//*[local-name() = 'body']" );