所以我有以下格式的XML:
<somenode>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title/>
</head>
<body>
<p>P one</p>
<p>Another p</p>
</body>
</html>
</somenode>
坐在那里有一些html,我认为不会是一个问题,因为它只会被视为xml。
我正在尝试选择&lt; body&gt;的内容(InnerXml)标签。但是,使用
xmlDoc.SelectSingleNode("somenode/html/body")
返回null
,并使用
xmlDoc.GetElementsByTagName("body")[0].InnerXml
给出InnerXml - 但每个&lt; p&gt;已附加xmlns="http://www.w3.org/1999/xhtml"
- 因此结果如下:
<p xmlns="http://www.w3.org/1999/xhtml">P one</p><p xmlns="http://www.w3.org/1999/xhtml">Another p</p>
有人可以对此有所了解吗?看起来像一些非常奇怪的行为,任何帮助将不胜感激。我只使用ASP.net 2.0,所以不幸的是尝试linq不是一种选择。
答案 0 :(得分:0)
由于<html>
元素将默认命名空间定义为http://www.w3.org/1999/xhtml。其中没有名称空间前缀的所有元素默认具有相同的名称空间。
由于body标签的内容是2个单独的<p>
元素,因此它们都获得声明。如果您的<p>
元素中包含其他元素,则它们将不具有声明。
答案 1 :(得分:0)
您的xpath表达式未指定默认命名空间。怎么样:
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsMgr.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");
XmlNode node = xmlDoc.SelectSingleNode("somenode/xhtml:html/xhtml:body", nsMgr);