| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
dmx102 22.07.2006 21:24 / 22.07.2006 21:25
# $Id: XmlParser.p,v 1.0.0.0 2006/07/17 Seomin Kirill Exp $
@CLASS
XmlParser
@create[]
$self.status(true)
#Ввод
@doXmlNew[docName;tag]
^try{
$self.status(true)
$self.$docName[^xdoc::create[$tag]]
}{
$exception.handled(true)
$self.status(false)
}
@doXmlLoad[docName;fileName]
^try{
$self.status(true)
$self.$docName[^xdoc::load[$fileName]]
}{
$exception.handled(true)
$self.status(false)
}
@getXmlRpc[docName]
^try{
$self.status(true)
$self.$docName[^xdoc::create{^untaint[as-is]{$request:body}}]
}{
$exception.handled(true)
$self.status(false)
}
#Узлы
@getNodeSelectFirst[docName;path][nodeList]
^try{
$self.status(true)
$nodeList[^self.$docName.select[$path]]
$result[$nodeList.0]
}{
$exception.handled(true)
$self.status(false)
}
@doNodeAdd[docName;path;tag;value][node;nodeNew;nodeNewValue;temp]
^try{
$self.status(true)
$node[^getNodeSelectFirst[$docName;$path]]
$nodeNew[^self.$docName.createElement[$tag]]
$temp[^node.appendChild[$nodeNew]]
$result(true)
^if(def $value){
$nodeNewValue[^self.$docName.createTextNode[$value]]
$nodeNew[^getNodeSelectFirst[$docName;$path/$tag]]
$temp[^nodeNew.appendChild[$nodeNewValue]]
}
}{
$exception.handled(true)
$self.status(false)
}
@doNodeDel[docName;path][node;nodeParent;temp]
^try{
$self.status(true)
$node[^getNodeSelectFirst[$docName;$path]]
$nodeParent[$node.parentNode]
$temp[^nodeParent.removeChild[$node]]
}{
$exception.handled(true)
$self.status(false)
}
@setNodeValue[docName;path;value][node]
^try{
$self.status(true)
$node[^getNodeSelectFirst[$docName;$path]]
$node.firstChild.nodeValue[$value]
}{
$exception.handled(true)
$self.status(false)
}
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo][nodeFrom;nodeNew;nodeTo;temp]
^try{
$self.status(true)
$nodeFrom[^getNodeSelectFirst[$docNameFrom;$pathFrom]]
$nodeNew[^self.$docNameTo.importNode[$nodeFrom](-1)]
$nodeTo[^getNodeSelectFirst[$docNameTo;$pathTo]]
$temp[^nodeTo.appendChild[$nodeNew]]
}{
$exception.handled(true)
$self.status(false)
}
@getNodeValue[docName;path][node]
^try{
$self.status(true)
$node[^self.getNodeSelectFirst[$docName;$path]]
$result[$node.firstChild.nodeValue]
}{
$exception.handled(true)
$self.status(false)
}
#Атрибуты
@doAttrAdd[docName;path;attr;value][node;attrNew;attrNewValue;temp]
^try{
$self.status(true)
$node[^getNodeSelectFirst[$docName;$path]]
$attrNew[^self.$docName.createAttribute[$attr]]
$temp[^node.appendChild[$attrNew]]
^if(def $value){
$attrNewValue[^self.$docName.createTextNode[$value]]
$attrNew[^getNodeSelectFirst[$docName;$path/@$attr]]
$temp[^attrNew.appendChild[$attrNewValue]]
}
}{
$exception.handled(true)
$self.status(false)
}
@doAttrDel[docName;path;attr][node;temp]
^try{
$self.status(true)
$node[^getNodeSelectFirst[$docName;$path]]
$temp[^node.removeAttribute[$attr]]
}{
$exception.handled(true)
$self.status(false)
}
@setAttrValue[docName;path;attr;value][node;temp]
^try{
$self.status(true)
$node[^getNodeSelectFirst[$docName;$path]]
$temp[^node.setAttribute[$attr;$value]]
}{
$exception.handled(true)
$self.status(false)
}
@getAttrValue[docName;path;attr][node]
^try{
$self.status(true)
$node[^self.getNodeSelectFirst[$docName;$path]]
$result[^node.getAttribute[$attr]]
}{
$exception.handled(true)
$self.status(false)
}
#Вывод
@doXmlSave[docName;fileName]
^try{
$self.status(true)
^self.$docName.save[$fileName]
}{
$exception.handled(true)
$self.status(false)
}
@getXmlXslt[docName;fileName][xslt]
^try{
$self.status(true)
$xslt[^self.$docName.transform[$fileName]]
$result[^xslt.string[$.method[html]]]
}{
$exception.handled(true)
$self.status(false)
}
@getXmlPrint[docName]
^try{
$self.status(true)
$result[^self.$docName.string[]]
}{
$exception.handled(true)
$self.status(false)
}
@setXmlRpc[docName]
^try{
$self.status(true)
$response:content-type[$.value[text/xml]$.charset[$response:charset]]
$response:body[^self.$docName.string[]]
}{
$exception.handled(true)
$self.status(false)
}
=============================
Комментарии к классу
=============================
@create[]
#Без комментариев
Создание XML документов
@doXmlNew[docName;root]
#Создание нового документа с сылкой-именем $docName, $root - корневой узел док-та
@doXmlLoad[docName;fileName]
#Загрузка XML док-та из источника $fileName в $docName
@getXmlRpc[docName;flag]
#Получение XML запроса в $docName
Узлы созданных ранее док-тов
@getNodeSelectFirst[docName;path]
#Получение первого узла-элемента из $docName по указанному пути $path - XPath
@doNodeAdd[docName;path;tag;value]
#Добавление узла по адресу $path в $docName, где имя нового узла $tag, с необязательным текстовым содержимым $value
@doNodeDel[docName;path]
#Удаление узла из $docName по пути $path
@setNodeValue[docName;path;value]
#Изменяем значение текстового значения узла по адресу $path в док-те $docName, на новое значение $value ($path должен указывать на узел)
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo]
#Копирование узла $docNameFrom по адресу $pathFrom в док-т $docNameTo по адресу $pathTo
@getNodeValue[docName;path]
#Получаем текстовое содержание узла по адресу $path в док-те $docName
Атрибуты узлов
@doAttrAdd[docName;path;attr;value]
#Добавляем аттрибут в док-т $docName по адресу $path с именем атрибута $attr и его не обязательным значением $value
@doAttrDel[docName;path;attr]
#Удаляем атрибут из документа $docName по адресу $path (указатель на материнский узел, где расположен атрибут $attr)
@setAttrValue[docName;path;attr;value]
#Устанавливаем значение атрибута из док-та $docName по адресу $path, где атрибут $attr и новое значение $value
@getAttrValue[docName;path;attr]
#Получаем значение атрибута из док-та $docName по адресу $path аттрибута $attr
Вывод
@doXmlSave[docName;fileName]
#Сохраняем XML в чистом виде из док-та $docName в файл $fileName
@getXmlXslt[docName;fileName]
#Предобразуем док-т $docName к xsl таблице $fileName
@getXmlPrint[docName]
#Выводим на экран чистый XML из $docName
@setXmlRpc[docName]
#Делает ответ сервера в виде XML из $docName
status - проверка успешности выполнения предъидущего оператора из класса(true;false)