Как обрабатывать XML, формировать или изменять его, и какие для этого есть функции в SharePoint EcmaScript - всю эту информацию я постарался собрать в сегодняшней статье.
XmlWriter
Впрочем, XmlWriter в SharePoint всё-таки есть. Располагается он в пространстве имен SP (т.е. SP.XmlWriter), а физически - находится в SP.Core.js. Применение в целом аналогично серверной версии, но поддерживаются только следующие методы:
- create(stringBuilder)
- writeStartElement(tagName)
- writeElementString(tagName, value)
- writeEndElement()
- writeAttributeString(localname, value)
- writeStartAttribute(localname)
- writeEndAttribute()
- writeString(value)
- writeRaw(xml)
var camlQuery = new SP.CamlQuery(); var sb = new Sys.StringBuilder(); var writer = SP.XmlWriter.create(sb); writer.writeStartElement("Where"); writer.writeStartElement("Eq"); writer.writeStartElement("FieldRef"); writer.writeAttributeString("Name", "StatusID"); writer.writeEndElement(); writer.writeStartElement("Value"); writer.writeAttributeString("Type", "Integer"); writer.writeString("1"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndElement(); writer.close(); camlQuery.set_viewXml(sb.toString()); // Result: <Where><Eq><FieldRef Name='StatusID' /><Value Type='Integer'>1</Value></Eq></Where>
Еще, при формировании XML может пригодиться вот этот метод:
SP.Utilities.HttpUtility.escapeXmlText
, как не трудно догадаться из названия, этот метод эскейпит строку так, чтобы её потом можно было использовать в name или value xml-элементов и атрибутов.
Конвертируем объекты в XML
Конечно, XmlWriter это здорово, но даже на стороне сервера его редко кто использует, потому что есть гораздо более интересные варианты. Например, XmlSerializer.
И если немного поискать, то действительно, в файле SP.Runtime.js можно обнаружить методы SP.DataConvert.writeDictionaryToXml и SP.DataConvert.writePropertiesToXml. И они действительно сериализуют js-объекты... Но, использовать их врядли получится. Дело в том, что эти методы всегда генерируют теги Property.
Например, вот такой код:
var sb = new Sys.StringBuilder(); var writer = SP.XmlWriter.create(sb); var context = new SP.SerializationContext(); var dict = { hello: "world", complexObject: { property1: "value1", property2: "value2"} }; var fields = ["hello", "complexObject"]; SP.DataConvert.writeDictionaryToXml(writer, dict, "root", fields, context); // Значение сгенерированного XML можно теперь получить через sb.toString()
Сгенерирует строку с вот таким XML:
<root> <Property Name="hello" Type="String">world</Property> <Property Name="complexObject" Type="Dictionary"> <Property Name="property1" Type="String">value1</Property> <Property Name="property2" Type="String">value2</Property> </Property> </root>
Как видите, практическая ценность обоих этих методов весьма невелика. Поэтому, на практике я стараюсь везде где можно использовать json, или преобразование json в XML (например, с помощью соответствующего jQuery-плагина).
Парзим XML
Вообще, лучше jQuery для того, чтобы распарзить XML, по моему скромному мнению - ничего нет :) Делается это очень просто:
var jQueryObjectFromXml = $(xmlString);
, и дальше уже делаем всё что угодно с полученным jQuery-объектом...
Впрочем, по умолчанию jQuery в SharePoint отсутствует, поэтому иногда может пригодиться и метод из SharePoint, который превращает XML в DOM-объект. Этот метод называется CUI.NativeUtility.createXMLDocFromString и расположен в файле CUI.js.
Пользоваться довольно просто. Пример:
var domElement = CUI.NativeUtility.createXMLDocFromString('<root><child name="hello world"/><child>test value</child></root>'); domElement.firstChild.nodeName // "root" domElement.firstChild.firstChild.attributes[0].value // "hello world" domElement.firstChild.lastChild.text // "test value"
Итоги
Традиционно, подводим итоги :) Работать с XML в SharePoint приходится довольно часто, в том числе и на стороне клиента, из JavaScript. И как всегда, в SharePoint обнаруживается довольно большое количество интересных объектов и методов, которые можно использовать в собственных целях. Документация по этим возможностям, к сожалению, чаще всего очень скудная - или отсутствует совсем. Поэтому, изучать приходится самостоятельно.
Надеюсь, эта статья будет уважаемым читателям полезна в плане увеличения кругозора, а также подтолкнет к собственным исследованиям в разных других направлениях :)
Комментариев нет:
Отправить комментарий
Внимание! Реклама и прочий спам будут беспощадно удаляться.
Примечание. Отправлять комментарии могут только участники этого блога.