是否可以从具有所有属性,名称空间等的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
由于
答案 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);
穷人的解决方案:)