ASP.NET InnerXml自动/错误地将属性文本附加到标记

时间:2008-12-17 04:37:47

标签: .net asp.net xml .net-2.0

所以我有以下格式的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不是一种选择。

2 个答案:

答案 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);