我想知道是否有一個DynamicXml的內置或開源實現?是否有使用動態的XElement或XDocument的實現?
喜歡的東西
var djson = System.Web.Helpers.Json.Decode(jsonText);
int id = djson.Id;
但對於XML字符串。
因此,而不是寫
xitem.Element("SomeElement")
我想有
dxitem.SomeElement
我想知道是否有一個DynamicXml的內置或開源實現?是否有使用動態的XElement或XDocument的實現?
喜歡的東西
var djson = System.Web.Helpers.Json.Decode(jsonText);
int id = djson.Id;
但對於XML字符串。
因此,而不是寫
xitem.Element("SomeElement")
我想有
dxitem.SomeElement
Jon Skeet的C# In Depth這個想法在第14章(在C#4章動態bahviour)舉行會談,並有可下載的來源here。
快速search使用C#4動態產生的讀出和寫入XML幾種實現:
,可能還有更多
最近我花了一些時間圍繞構建動態包裝XElement
和XDocument
爲我的項目之一,你可以看看它here。
想法完全相同,但我將實現分爲兩個獨立的類:DynamicXmlReader
和DynamicXmlWriter
,其中前者只能讀取元素和屬性,後來可以添加子元素和屬性。如果DynamicXmlReader
找不到合適的子元素或屬性,則會引發異常,但DynamicXmlWriter
會將它們添加到基礎XElement
中。
例如,在這裏我的兩個單元測試,我正在使用的樣品從喬恩斯基特的書:
[TestCase]
public void SkeetBookXmlTest()
{
string books =
@"<books>
<book name=""Mortal Engines"">
<author name=""Philip Reeve"" />
</book>
<book name=""The Talisman"">
<author name=""Stephen King"" />
<author name=""Peter Straub"" />
</book>
<book name=""Rose"">
<author name=""Holly Webb"" />
<excerpt>Rose was remembering the illustrations from Morally Instructive Tales for the Nursery.</excerpt>
</book>
</books>";
dynamic dynamicXml = XElement.Parse(books).AsDynamic();
Assert.That(dynamicXml.book[0]["name"].Value, Is.EqualTo("Mortal Engines"));
Assert.That(dynamicXml.book[0].author["name"].Value, Is.EqualTo("Philip Reeve"));
Assert.That(dynamicXml.book[2]["name"].Value, Is.EqualTo("Rose"));
Assert.That((string)dynamicXml.book[2].excerpt, Is.EqualTo("Rose was remembering the illustrations from Morally Instructive Tales for the Nursery."));
}
或者創建完全相同的XML文檔的另一個單元測試:
[TestCase]
public void SkeetBookXmlTest()
{
// Jon Skeet in his C# in Depth used following sample
string books =
@"<books>
<book name=""Mortal Engines"">
<author name=""Philip Reeve"" />
</book>
<book name=""The Talisman"">
<author name=""Stephen King"" />
<author name=""Peter Straub"" />
</book>
<book name=""Rose"">
<author name=""Holly Webb"" />
<excerpt>Rose was remembering the illustrations from Morally Instructive Tales for the Nursery.</excerpt>
</book>
</books>";
// Lets create this data dynamically
XElement element = new XElement("books");
dynamic dynamicXml = element.AsDynamicWriter();
dynamicXml.book[0]["name"] = "Mortal Engines";
dynamicXml.book[0].author["name"] = "Philip Reeve";
dynamicXml.book[1]["name"] = "The Tailisman";
dynamicXml.book[1].author[0]["name"] = "Stephen King";
dynamicXml.book[1].author[1]["name"] = "Peter Straub";
dynamicXml.book[2]["name"] = "Rose";
dynamicXml.book[2].author["name"] = "Holly Webb";
dynamicXml.book[2].excerpt = "Rose was remembering the illustrations from Morally Instructive Tales for the Nursery.";
Console.WriteLine(element);
Assert.That(dynamicXml.book[0]["name"].Value, Is.EqualTo("Mortal Engines"));
Assert.That(dynamicXml.book[0].author["name"].Value, Is.EqualTo("Philip Reeve"));
Assert.That(dynamicXml.book[2]["name"].Value, Is.EqualTo("Rose"));
Assert.That((string)dynamicXml.book[2].excerpt, Is.EqualTo("Rose was remembering the illustrations from Morally Instructive Tales for the Nursery."));
}
這這些有什麼好處? – 2011-04-15 11:30:32