2010-01-06 28 views
2

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

例如。

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

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

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

编辑

为了阐述,这是用XML创建上面会返回整个XML片段,包括作为一个字符串的子节点的节点上XmlNode.OuterXml。

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

但我需要没有子节点的XML片段的开始标记。而如果没有构建它使用XmlAttribute阵列,localName创建,命名空间等

这是C#3.5

感谢

+0

能否请你解释一下? – junmats 2010-01-06 06:21:45

回答

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文档中,属性等的顺序方面然而,它至少会是相当于

1

如何:

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

穷人的解决方案:)

+0

我想你的意思是'n.OuterXml.Replace(n.InnerXml,“”);' – 2010-01-06 09:41:01

+0

是的,抱歉,还为时过早... – tzup 2010-01-06 10:18:06

2

是有一些原因,你不能简单地说:

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