获取带属性的XmlNode打开标记

时间:2010-01-06 06:17:36

标签: c# .net xml

是否可以从具有所有属性,名称空间等的XmlNode获取开放标记?

例如

<root xmlns="urn:..." rattr="a">
   <child attr="1">test</child>
</root>

我想从XmlNode和稍后的结束标记中检索整个开始标记,如果可能的话,从原始XML文档中检索完全。两者都是字符串。

基本上没有子节点的XmlNode.OuterXml。

修改

详细说明,使用上面的XML创建的节点上的XmlNode.OuterXml将返回整个XML片段,包括子节点作为单个字符串。

同一片段上的XmlNode.InnerXml将返回子节点而不是父节点,再次作为单个字符串。

但我需要没有子节点的XML片段的开始标记。并且不使用XmlAttribute数组,LocalName,Namespace等构建它

这是C#3.5

由于

3 个答案:

答案 0 :(得分:2)

有什么理由你不能简单地说:

string s = n.OuterXml.Substring(0, n.OuterXml.IndexOf(">") + 1);

答案 1 :(得分:1)

我认为最简单的方法是调用XmlNode.CloneNode(false)(根据文档)克隆所有属性而不是子节点。然后,您可以使用OuterXml - 尽管这也会为您提供结束标记。

例如:

using System;
using System.Xml;

public class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(@"<root xmlns='urn:xyz' rattr='a'>
           <child attr='1'>test</child></root>");
        XmlElement root = doc.DocumentElement;
        XmlNode clone = root.CloneNode(false);
        Console.WriteLine(clone.OuterXml);
    }
}

输出:

<root xmlns="urn:xyz" rattr="a"></root>

请注意,根据原始XML文档,在属性排序等方面,这可能不是完全。但是,它至少是等效的。< / p>

答案 2 :(得分:1)

怎么样:

 xmlNode.OuterXML.Replace(xmlNode.InnerXML, String.Empty);

穷人的解决方案:)