2 回答

TA貢獻1842條經(jīng)驗 獲得超22個贊
要獲取以下 XML:
<Model xsi:type="SettingsModel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>Test05</Name>
<IsActive>false</IsActive>
<IsHidden>false</IsHidden>
</Model>
您可以使用以下代碼:
var model = new { Name = "Test05", IsActive = false, IsHidden = false };
var namespaceName = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace xsi = XNamespace.Get(namespaceName);
var x = new XElement("Model",
new XAttribute(xsi + "type", "SettingsModel"),
new XAttribute(XNamespace.Xmlns + "xsi", namespaceName),
new XElement("Name", model.Name),
new XElement("IsActive", model.IsActive),
new XElement("IsHidden", model.IsHidden)
);
Console.WriteLine(x);
LINQ to XML 是一種令人沮喪的練習(xí)。從長遠來看,您可能更喜歡使用帶有適當(dāng) XML 序列化裝飾器的具體類。
===編輯===
以下是將數(shù)據(jù)寫入 XML 文件的一些附加代碼:
var settings = new XmlWriterSettings()
{
Indent = true,
OmitXmlDeclaration = true
};
using (var stream = new FileStream("Test05.xml", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
using (var writer = XmlWriter.Create(stream, settings))
{
x.WriteTo(writer);
}

TA貢獻1825條經(jīng)驗 獲得超6個贊
LINQ 代表語言集成查詢,它就是這樣:一種查詢技術(shù),允許您將來自各種數(shù)據(jù)源的數(shù)據(jù)查詢到對象結(jié)果中。您想要做一些完全不同的事情,所以 LINQ 是一個錯誤的工具。
另外,我猜想用于從示例 XML 文件(或架構(gòu))生成類的 xsd.exe 對您沒有多大幫助,因為據(jù)我所知,它不夠聰明,無法檢測架構(gòu)類之間的繼承。
因此,我建議手動編寫 XML 架構(gòu),然后使用 xsd.exe 為該架構(gòu)生成類。然后,您可以實例化這些類,并且XmlSerializer將按照您的預(yù)期提供輸出。
架構(gòu)應(yīng)該類似于以下內(nèi)容(我在這里排除了實際的模型內(nèi)容,您必須選擇是否將其放入Model或SettingsModel)。
<xs:element name="Model" type="Model" />
<xs:class name="Model" abstract="True">
<xs:complexContent />
</xs:class>
<xs:class name="SettingsModel">
<xs:complexContent>
<xs:extension base="Model" />
</xs:complexContent>
</xs:class>
- 2 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報