2010-01-06 71 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);