Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.
function $http(apiConfig) {
return new Promise(function (resolve, reject) {
var client = new XMLHttpRequest();
client.open(apiConfig.method, apiConfig.url);
client.send();
client.onload = function () {
if (this.status >= 200 && this.status < 300) {
// Performs the function "resolve" when this.status is equal to 2xx.
// Your logic here.
resolve(this.response);
}
else {
// Performs the function "reject" when this.status is different than 2xx.
reject(this.statusText);
}
};
client.onerror = function () {
reject(this.statusText);
};
});
}
Пример простого использования:
$http({
method: 'get',
url: 'google.com'
}).then(function(response) {
console.log(response);
}, function(error) {
console.log(error)
});
Это зависит от сценария. XmlSerializer
, безусловно, является одним из способов и имеет преимущество прямого отображения объектной модели. В .NET 3.5 XDocument
и т. Д. Также очень дружелюбны. Если размер очень большой, то XmlWriter
является вашим другом.
Для примера XDocument
:
Console.WriteLine(
new XElement("Foo",
new XAttribute("Bar", "some & value"),
new XElement("Nested", "data")));
Или то же самое с XmlDocument
:
XmlDocument doc = new XmlDocument();
XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo"));
el.SetAttribute("Bar", "some & value");
el.AppendChild(doc.CreateElement("Nested")).InnerText = "data";
Console.WriteLine(doc.OuterXml);
Если вы пишете большой поток данных, то любой из подходов DOM (например, XmlDocument
/ XDocument
и т. д.) быстро займет много памяти. Поэтому, если вы пишете XML-файл размером 100 Мб из CSV , вы можете рассмотреть XmlWriter
; это более примитивный (однократный пожарный), но очень эффективный (представьте себе большой цикл здесь):
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();
Наконец, через XmlSerializer
:
[Serializable]
public class Foo
{
[XmlAttribute]
public string Bar { get; set; }
public string Nested { get; set; }
}
...
Foo foo = new Foo
{
Bar = "some & value",
Nested = "data"
};
new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo);
Это хорошая модель для сопоставления классов и т. Д .; однако, может быть, слишком сложно, если вы делаете что-то простое (или если желаемый XML на самом деле не имеет прямой корреляции с объектной моделью). Еще одна проблема с XmlSerializer
заключается в том, что он не любит сериализовать неизменяемые типы: все должно иметь публичный getter и setter (если вы не сделаете все сами, выполнив IXmlSerializable
, и в этом случае вы не получили многого, используя XmlSerializer
).
new XElement("Foo",
from s in nameValuePairList
select
new XElement("Bar",
new XAttribute("SomeAttr", "SomeAttrValue"),
new XElement("Name", s.Name),
new XElement("Value", s.Value)
)
);
Я думаю, что этот ресурс должен быть достаточным для умеренного сохранения / загрузки XML: Чтение / запись XML с использованием C # .
Моя задача состояла в том, чтобы сохранить нотную запись. Я выбираю XML, потому что я предполагаю, что .NET достаточно созрел, чтобы обеспечить легкое решение задачи. Я был прав:)
Это прототип моего файла:
<music judul="Kupu-Kupu yang Lucu" pengarang="Ibu Sud" tempo="120" birama="4/4" nadadasar="1=F" biramapembilang="4" biramapenyebut="4">
<not angka="1" oktaf="0" naikturun="" nilai="1"/>
<not angka="2" oktaf="0" naikturun="" nilai="0.5"/>
<not angka="5" oktaf="1" naikturun="/" nilai="0.25"/>
<not angka="2" oktaf="0" naikturun="\" nilai="0.125"/>
<not angka="1" oktaf="0" naikturun="" nilai="0.0625"/>
</music>
Это можно решить довольно легко:
Для сохранения в файл:
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.Title = "Save Song File";
saveFileDialog1.Filter = "Song Files|*.xsong";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
w.WriteStartDocument();
w.WriteStartElement("music");
w.WriteAttributeString("judul", Program.music.getTitle());
w.WriteAttributeString("pengarang", Program.music.getAuthor());
w.WriteAttributeString("tempo", Program.music.getTempo()+"");
w.WriteAttributeString("birama", Program.music.getBirama());
w.WriteAttributeString("nadadasar", Program.music.getNadaDasar());
w.WriteAttributeString("biramapembilang", Program.music.getBiramaPembilang()+"");
w.WriteAttributeString("biramapenyebut", Program.music.getBiramaPenyebut()+"");
for (int i = 0; i < listNotasi.Count; i++)
{
CNot not = listNotasi[i];
w.WriteStartElement("not");
w.WriteAttributeString("angka", not.getNot() + "");
w.WriteAttributeString("oktaf", not.getOktaf() + "");
String naikturun="";
if(not.isTurunSetengah())naikturun="\\";
else if(not.isNaikSetengah())naikturun="/";
w.WriteAttributeString("naikturun",naikturun);
w.WriteAttributeString("nilai", not.getNilaiNot()+"");
w.WriteEndElement();
}
w.WriteEndElement();
w.Flush();
fs.Close();
}
}
Для файла нагрузки:
openFileDialog1.Title = "Open Song File";
openFileDialog1.Filter = "Song Files|*.xsong";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open);
XmlTextReader r = new XmlTextReader(fs);
while (r.Read())
{
if (r.NodeType == XmlNodeType.Element)
{
if (r.Name.ToLower().Equals("music"))
{
Program.music = new CMusic(r.GetAttribute("judul"),
r.GetAttribute("pengarang"),
r.GetAttribute("birama"),
Convert.ToInt32(r.GetAttribute("tempo")),
r.GetAttribute("nadadasar"),
Convert.ToInt32(r.GetAttribute("biramapembilang")),
Convert.ToInt32(r.GetAttribute("biramapenyebut")));
}
else
if (r.Name.ToLower().Equals("not"))
{
CNot not = new CNot(Convert.ToInt32(r.GetAttribute("angka")), Convert.ToInt32(r.GetAttribute("oktaf")));
if (r.GetAttribute("naikturun").Equals("/"))
{
not.setNaikSetengah();
}
else if (r.GetAttribute("naikturun").Equals("\\"))
{
not.setTurunSetengah();
}
not.setNilaiNot(Convert.ToSingle(r.GetAttribute("nilai")));
listNotasi.Add(not);
}
}
else
if (r.NodeType == XmlNodeType.Text)
{
Console.WriteLine("\tVALUE: " + r.Value);
}
}
}
}
}
Лучшая вещь, которую я пробовал, - LINQ to XSD (что неизвестно большинству разработчиков). Вы даете ему схему XSD, и она генерирует идеально отображаемую полную сильно типизированную модель объекта (на основе LINQ to XML) для вас в фоновом режиме, с которой очень легко работать - и она обновляет и проверяет вашу объектную модель и XML в в режиме реального времени.
Если у вас есть схема XSD, которая выглядит так:
<xs:element name="RootElement">
<xs:complexType>
<xs:sequence>
<xs:element name="Element1" type="xs:string" />
<xs:element name="Element2" type="xs:string" />
</xs:sequence>
<xs:attribute name="Attribute1" type="xs:integer" use="optional" />
<xs:attribute name="Attribute2" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
Тогда вы можете просто создать XML-файл например:
RootElement rootElement = new RootElement;
rootElement.Element1 = "Element1";
rootElement.Element2 = "Element2";
rootElement.Attribute1 = 5;
rootElement.Attribute2 = true;
Или просто загрузите XML из файла следующим образом:
RootElement rootElement = RootElement.Load(filePath);
Или сохраните его следующим образом:
rootElement.Save(string);
rootElement.Save(textWriter);
rootElement.Save(xmlWriter);
rootElement.Untyped
также дает элемент в виде XElement (от LINQ to XML).
В прошлом я создал свою XML-схему, а затем использовал инструмент для генерации классов C #, которые будут сериализованы для этой схемы. Инструмент определения схемы XML - один из примеров
http://msdn.microsoft.com/en-us/library/x6c1kb0s (VS.71) .aspx
Как указано выше.
Я использую stringbuilder.append ().
Очень просто, и вы можете сделать xmldocument.load (объект strinbuilder как параметр).
Вы, вероятно, обнаружите, что используете параметр string.concat в параметре append, но это очень простой подход.
Для простых вещей я просто использую классы XmlDocument / XmlNode / XmlAttribute и DOM XmlDocument, найденные в System.XML.
Он генерирует XML для меня, мне просто нужно связать несколько элементов вместе.
Однако, по большей части, я использую сериализацию XML.
Также ознакомьтесь с функциональным интерфейсом XmlDocument Mark S. Rasmussen , который действительно обеспечивает легкий для ввода / чтения XML-выход.
XmlWriter - это самый быстрый способ написать хороший XML. XDocument, XMLDocument и некоторые другие хорошо работают, но не оптимизированы для написания XML. Если вы хотите написать XML как можно быстрее, вы должны обязательно использовать XmlWriter.
Я бы попросил XLINQ (читал: LINQ to XML).
Для простых случаев я также хотел бы взглянуть на XmlOutput на свободный интерфейс для построения Xml.
XmlOutput отлично подходит для простого создания Xml с читаемым и поддерживаемым кодом, действительный Xml. У оригинальной записи есть несколько отличных примеров.