2014-01-19 5 views
1

Я хочу создать объект XmlDocument, игнорируя первую строку, а также удалить все атрибуты всех других элементов. Как мне это сделать? Строка xml и код, который у меня есть, приведены ниже.Создайте XmlDocument без атрибутов и первого элемента

<?xml version="1.0" encoding="utf-8"?> 
<boolean xmlns="http://tempuri.org/">true</boolean> 

код в C# я использую:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xmlString);//xmlString is the value in snippet above this 

ответ

1

для того, чтобы удалить все атрибуты просто вызовите .RemoveAllAttributes() метод на каждом узле, но будьте осторожны: Атрибуты с именем xlmns не рассматриваются как обычные атрибуты. Они являются частью пространства имен вещей, и вы должны удалить их по-другому: Answer to: C# How to remove namespace information from XML elements

string xmlPath = @"D:\test.xml"; 
XDocument d = XDocument.Load(xmlPath); 

var allNodes = d.Descendants(); 

foreach (var node in allNodes) 
{ 
    //Removes ALL attributes except namespace attributes like 'xmlns="..."' 
    node.RemoveAttributes(); 
} 

Чтобы удалить объявление в начале:

//Instead of using XDocument.Save() , use XmlWrite to Remove the declaration 
XmlWriterSettings xws = new XmlWriterSettings(); 
xws.OmitXmlDeclaration = true; 
xws.Indent = true; 
using (var stream = File.Create(@"D:\testNew.xml")) 
using (XmlWriter xw = XmlWriter.Create(stream, xws)) 
{ 
    d.Save(xw); 
} 
+0

Можете ли вы опубликовать код при использовании XML-строки, а не файла? Я не могу создать XDocument с XML-строкой. – Sunil

+0

Используйте ['XDocument.Parse'] (http://msdn.microsoft.com/en-us/library/bb345532 (v = vs.110) .aspx) – KyleMit

1

Я вывел это решение из this SO question , Вот полный рабочий класс MSTest.

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     var xmlString = @"<?xml version=""1.0"" encoding=""utf-8""?> 
          <root> 
           <boolean xmlns=""http://tempuri.org"" atr=""test"">true</boolean> 
           <boolean xmlns=""http://tempuri.org"" atr=""test"">true</boolean> 
           <boolean xmlns=""http://tempuri.org"" atr=""test"">true</boolean> 
           <boolean xmlns=""http://tempuri.org"" atr=""test"">true</boolean> 
          </root>"; 
     var xElement = XElement.Parse(xmlString); 


     var expectedXmlString = @"<root> 
           <boolean>true</boolean> 
           <boolean>true</boolean> 
           <boolean>true</boolean> 
           <boolean>true</boolean> 
          </root>"; 
     var expectedXElement = XElement.Parse(expectedXmlString); 

     var actualXElement = stripAttributes(xElement); 

     Assert.AreEqual(expectedXElement.ToString(), actualXElement.ToString()); 
    } 

    static XElement stripAttributes(XElement root) 
    { 
     return new XElement(
      root.Name.LocalName, 
      root.HasElements ? 
       root.Elements().Select(el => stripAttributes(el)) : 
       (object)root.Value 
     ); 
    } 
} 
Смежные вопросы