|
дПСЦХЛ ЯОНЯНАНЛ ОПЕДЯРЮБКЕМХЪ БМСРПЕММЕИ ЯРПСЙРСПШ ДНЙСЛЕМРЮ ЪБКЪЧРЯЪ DOM - ХМРЕПТЕИЯШ. йЮЙ СФЕ СОНЛХМЮКНЯЭ, ХУ ПЕЮКХГЮЖХЕИ ГЮМХЛЮЧРЯЪ ПЮГПЮАНРВХЙХ XML-ЮМЮКХГЮРНПЮ, ХЯОНКЭГСЪ ДКЪ ЩРНЦН БНГЛНФМНЯРХ ЙНМЙПЕРМНЦН ЪГШЙЮ ОПНЦПЮЛЛХПНБЮМХЪ. оПНЦПЮЛЛХЯРШ МЮ Java ЛНЦСР МЮИРХ ЩРХ ЙКЮЯЯШ Б АХАКХНРЕЙЕ org.w3.dom. мЮЯКЕДСЪ БХПРСЮКЭМШЕ ЛЕРНДШ DOM ХМРЕПТЕИЯНБ, ЙКЮЯЯШ ЮМЮКХГЮРНПЮ ОПЕДНЯРЮБКЪЧР ОПХКНФЕМХЧ ЯРЮМДЮПРМШИ ЯОНЯНА ЛЮМХОСКХПНБЮМХЪ ЯРПСЙРСПНИ ДНЙСЛЕМРЮ. б ЯБНЧ НВЕПЕДЭ, ОПХКНФЕМХЕ, ХЯОНКЭГСЧЫЕЕ XML-ЮМЮКХГЮРНП, ЛНФЕР МЕ ГМЮРЭ Н ЯОНЯНАЕ ПЕЮКХГЮЖХХ ХМРЕПТЕИЯНБ, ЕЛС ДНЯРСОМЮ ЦНРНБЮЪ АХАКХНРЕЙЮ ЛЕРНДНБ, ОПХ ОНЛНЫХ ЙНРНПНИ НМ ЛНФЕР ОПНХГБНДХРЭ ОНХЯЙ МСФМШУ ТПЮЦЛЕМРНБ ДНЙСЛЕМРЮ, ЯНГДЮБЮРЭ, СДЮКЪРЭ Х ЛНДХТХЖХПНБЮРЭ ЕЦН ЩКЕЛЕМРШ.
нДМХЛ ХГ ДНЯРСОМШУ МЮ ЯЕЦНДМЪ DOM-ЯНБЛЕЯРХЛШУ МЮАНПНБ ЙКЮЯЯНБ ДКЪ ПЮАНРШ Я ДНЙСЛЕМРЮЛХ ЪБКЪЕРЯЪ АХАКХНРЕЙЮ com.ibm.dom, БУНДЪЫЮЪ Б ЯНЯРЮБ XML ЮМЮКХГЮРНПЮ xml4j НР IBM. оНКСВХРЭ ЕЕ ЛНФМН ОН ЮДПЕЯС www.alphaworks.ibm.com. оПХМЖХО ХЯОНКЭГНБЮМХЪ DOM ХМРЕПТЕЯНБ ОН ЯПЮБМЕМХЧ Я IE5 ОПЮЙРХВЕЯЙХ МЕ ХГЛЕМХКЯЪ - ОНЛЕМЪКХЯЭ РНКЭЙН МЮГБЮМХЪ НАЗЕЙРНБ Х ЛЕРНДНБ. хУ ЙПЮРЙХИ НАГНП ОПЕДЯРЮБКЕМ Б ЯКЕДСЧЫЕИ РЮАКХЖЕ.
Node |
аЮГНБШИ ХМРЕПТЕИЯ ДКЪ НЯРЮКЭМШУ ЩКЕЛЕМРНБ НАЗЕЙРМНИ ЛНДЕКХ XML, ОПЕДЯРЮБКЪЧЫХИ СГЕК ДЕПЕБЮ ЯРПСЙРСПШ ДНЙСЛЕМРЮ. |
Document |
хЯОНКЭГСЕРЯЪ ДКЪ ОНКСВЕМХЪ ХМТНПЛЮЖХХ Н ДНЙСЛЕМРЕ Х ХГЛЕМЕМХЪ ЕЦН ЯРПСЙРСПШ. щРН ХМРЕПТЕИЯ ОПЕДЯРЮБКЪЕР ЯНАНИ ЙНПМЕБНИ ЩКЕЛЕМР XML ДНЙСЛЕМРЮ Х ЯНДЕПФХР ЛЕРНДШ ДНЯРСОЮ ЙН БЯЕЛС ЯНДЕПФХЛНЛС ДНЙСЛЕМРЮ. оПХ ОНЛНЫХ ЛЕРНДНБ НАЗЕЙРЮ Document Б ОПНЦПЮЛЛЕ ЛНФМН ЯНГДЮБЮРЭ ДНВЕПМХЕ НАЗЕЙРШ, ОПЕДЯРЮБКЪЧЫХЕ ПЮГКХВМШЕ ЙНМЯРПСЙЖХХ ДНЙСЛЕМРЮ (МЮОПХЛЕП, createElement - ЯНГДЮМХЕ ЩКЕЛЕМРЮ, createComment - ЯНГДЮМХЕ ЙНЛЛЕМРЮПХЪ, createTextNode - РЕЙЯРНБНЦН ТПЮЦЛЕМРЮ), СДЮКЪРЭ, ОЕПЕЛЕЫЮРЭ, ДНАЮБКЪРЭ НАЗЕЙРШ (removeChild, replaceChild, insertBefore, ...), ОЕПЕЛЕЫЮРЭЯЪ ОН ДЕПЕБС ЩКЕЛЕМРНБ(getFirstChild, getLastChild, getNextSibling, getParentNode, getPreviousSibling, ...), ОНКСВЮРЭ ЩКЕЛЕМРШ ОН ХУ МЮГБЮМХЧ (getElementsByTagName, :) Х Р.Д. б НАЗЕЙРМНИ ЛНДЕКХ IE5 ЩРНР ХМРЕПТЕИЯ ДНЯРСОЕМ ДКЪ ЯЖЕМЮПХЕБ МЮ JScript, VB ВЕПЕГ НАЗЕЙР XMLDOMDocument |
Element |
оПЕДЯРЮБКЪЕР ЩКЕЛЕМР ДНЙСЛЕМРЮ, НОПЕДЕКЪЪ ЛЕРНДШ ДНЯРСОЮ Й ЕЦН МЮГБЮМХЧ(getTagName, getElementsByTagName), ЮРПХАСРЮЛ (getAttribute, getAttributeNode, setAttribute, removeAttribute, : ) Х ДНВЕПМХЛ ЩКЕЛЕМРЮЛ(appendChild, getChildNodes, getFirstChild, ...). |
Attr |
хМРЕПТЕИЯ, ОПЕДЯРЮБКЪЧЫХИ ЮРПХАСР ЩКЕЛЕМРЮ. хЛЕЕР ЛЕРНДШ ДКЪ ОНКСВЕМХЪ(getValue) Х СЯРЮМНБКЕМХЪ(setValue) ГМЮВЕМХЪ ЮРПХАСРЮ. уНРЪ ЯНЦКЮЯМН ЯХМРЮЙЯХЯС XML ЮРПХАСРШ ДНКФМШ МЮГМЮВЮРЭЯЪ РНКЭЙН ЩКЕЛЕМРЮЛ, Б DOM БНГЛНФМН ХУ ЯНГДЮМХЕ КЧАШЛ НАЗЕЙРНЛ, МЮЯКЕДСЧЫХЛ ХМРЕПТЕИЯ Node. оНЩРНЛС ЛНФМН ЯНГДЮРЭ ЮРПХАСР ДКЪ ДНЙСЛЕМРЮ, ЙНРНПШИ АСДЕР МЮУНДХРЯЪ Б ЯОХЯЙЕ ЮРПХАСРНБ, МН МЕ ОПХМЮДКЕФЮРЭ МХ НДМНЛС ХГ ЕЦН ЩКЕЛЕМРНБ. |
CharacterData |
хМРЕПТЕИЯ, ОПЕДНЯРЮБКЪЧЫХИ ДНЯРСО Й РЕЙЯРНБШЛ ДЮММШЛ ДНЙСЛЕМРЮ. б XML ДНЙСЛЕМРЕ Й ЩРНЛС РХОС ДЮММШУ НРМНЯЪРЯЪ ЙНЛЛЕМРЮПХХ, РЕЙЯРНБНЕ ЯНДЕПФХЛНЕ ЩКЕЛЕМРНБ, ЯЕЙЖХХ CDATA. оПХ ОНЛНЫХ ЛЕРНДНБ ЩРНЦН ХМРЕПТЕИЯЮ ЛНФМН ДНАЮБКЪРЭ, СДЮКЪРЭ, ПЕДЮЙРХПНБЮРЭ ДЮММШЕ(appendData, deleteData, replaceData, setData), ОНКСВЮРЭ ПЮГЛЕП НАКЮЯРХ РЕЙЯРЮ (getLength) Х ХГБКЕЙЮРЭ РЕЙЯРНБНЕ ЯНДЕПФХЛНЕ(getData, substringData, ...) |
Comments |
хМРЕПТЕИЯ ДКЪ ДНЯРСОЮ Й РЕЙЯРС ЙНЛЛЕМРЮПХЕБ |
Text |
оПЕДЯРЮБКЪЕР РЕЙЯРНБНЕ ЯНДЕПФХЛНЕ ЩКЕЛЕМРЮ |
CDATASection |
хМРЕПТЕИЯ, ОПЕДЯРЮБКЪЧЫХИ ЯЕЙЖХХ CDATA - ТПЮЦЛЕМРНБ ДНЙСЛЕМРЮ, ГЮЙКЧВЕММШЕ Б ЯХЛБНКШ "[[" Х "]]>", ЙНРНПШЕ МЕ НАПЮАЮРШБЮЧРЯЪ XML-ЮМЮКХГЮРНПНЛ Х ОНЩРНЛС ЛНЦСР ЯНДЕПФЮРЭ ЯХЛБНКШ, "ГЮОПЕЬЕММШЕ" Б ЯОЕЖХТХЙЮЖХХ XML. б ЩРС НАКЮЯРЭ ЛНФМН, Й ОПХЛЕПС, ОНЛЕЫЮРЭ ЯРХКЕБШЕ РЮАКХЖШ ХКХ JavaScript ЯЖЕМЮПХХ, ХЯОНКЭГСЕЛШЕ ОПХ НРНАПЮФЕМХХ HTML ЯРПЮМХЖШ. |
ProcessingInstruction |
оПЕДНЯРЮБКЪЕР ДНЯРСО Й Р.М. НАКЮЯРХ "ХМЯРПСЙЖХИ ОПНЖЕЯЯНПЮ", ДЮММШЕ ХГ ЙНРНПНИ ХЯОНКЭГСЧРЯЪ XML-ЮМЮКХГЮРНПНЛ ОПХ ПЮГАНПЕ ДНЙСЛЕМРЮ. дНЯРСО Й ЩРХЛ ДЮММШЛ БНГЛНФЕМ ОПХ ОНЛНЫХ ЛЕРНДН getData, setData Х getTarget |
Notation |
нОПЕДЕКЪЕР ХМЯРПСЙЖХЧ DTD НОХЯЮМХЪ. дКЪ ОНКСВЕМХЪ ЕЕ ХДЕМРХТХЙЮРНПНБ ХЯОНКЭГСЧРЯЪ ЛЕРНДШ getPublicId Х getSystemId . DOM Level 1 МЕ ОНДДЕПФХБЮЕР ОПЪЛНЦН ДНЯРСОЮ Й DTD ДЕЙКЮПЮЖХЪЛ ОН ГЮОХЯХ Х ЯЕИВЮЯ НМХ ДНЯРСОМШ КХЬЭ ДКЪ ВРЕМХЪ (ОПХ ОНЛНЫХ ОЮПЮЛЕРПЮ nodeName ХМРЕПТЕИЯЮ Node) |
б ЯКЕДСЧЫЕЛ ОПХЛЕПЕ ДЕЛНМЯРПХПСЕРЯЪ ХЯОНКЭГНБЮМХЕ DOM-НАЗЕЙРНБ ДКЪ БШБНДЮ ЯНДЕПФХЛНЦН XML ДНЙСЛЕМРЮ Б ДБСУ ТНПЛЮРЮУ - Б БХДЕ ДЕПЕБЮ ЩКЕЛЕМРНБ Х НАШВМНИ HTML ЯРПЮМХЖШ. мЕЛМНЦН ХГЛЕМХБ ОПХЛЕП, ЛНФМН ГЮЯРЮБХРЭ ОПНЦПЮЛЛС ЯНУПЮМЪРЭ БШУНДМНИ ТНПЛЮР Б ТЮИКЕ Х ЛШ ОНКСВХЛ РЮЙХЛ НАПЮГНЛ НАШВМШИ XML-HTML ЙНМБЕПРНП.
/* оПХЛЕП ХЯОНКЭГНБЮМХЪ DOM ЮМЮКХГЮРНПЮ. дЕЛНМЯРПХПСЕРЯЪ БНГЛНФМНЯРЭ ПЕЙСПЯХБМНЦН НАУНДЮ ДЕПЕБЮ ЩКЕЛЕМРНБ, ЯНГДЮМХЕ МНБШУ ЩКЕЛЕМРНБ, ТХКЭРПЮЖХЪ ЩКЕЛЕМРНБ (ОНХЯЙЮ ОН ОЮПЮЛЕРПЮЛ) */ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.util.*; import org.w3c.dom.*; import org.xml.sax.Parser; import org.xml.sax.SAXException; import org.xml.sax.helpers.ParserFactory; import com.ibm.xml.parsers.DOMParser; public class logParser { static String defaultParser = "com.ibm.xml.parsers.DOMParser"; static String urlLog; static Document xmldoc = null; static PrintWriter out; /* йНМЯРПСЙРНП МЮЬЕЦН ЙКЮЯЯЮ- НАПЮАНРВХЙЮ. б МЕЛ ЯНГДЮЕРЯЪ БШУНДМНИ ОНРНЙ ДКЪ ОЕВЮРХ */ public logParser(String url){ urlLog = url; try { out = new PrintWriter(new OutputStreamWriter(System.out, "koi8-r")); } catch (UnsupportedEncodingException e) { System.err.println(e.toString()); } } public void parseDoc(){ parseDoc(defaultParser); } /* яНГДЮМХЕ ЙКЮЯЯЮ ЮМЮКХГЮРНПЮ, НАПЮАРЙЮ ХЛ XML-ДНЙСЛЕМРЮ Х ЯНГДЮМХЕ НАЗЕЙРМНИ ЛНДЕКХ ДНЙСЛЕМРЮ */ public void parseDoc(String parserName){ try { Parser parser = ParserFactory.makeParser(parserName); parser.parse(urlLog); // оНКСВЕМХЕ СЙЮГЮРЕКЪ МЮ ЙНПМЕБНИ ЩКЕЛЕМР ДНЙСЛЕМРЮ xmldoc = ((DOMParser)parser).getDocument(); } catch (Exception e) { System.err.println(e.toString()); } } //========================================================================== // бШБНД ЯНДЕПФХЛНЦН ДНЙСЛЕМРЮ Б БХДЕ ТНПЛЮРХПНБЮММНЦН ЯОХЯЙЮ XML- ЩКЕЛЕМРНБ //======================== public void viewLogAsXML(){ try { viewLogAsXML(xmldoc,""); } catch (Exception e) { System.out.println(e.toString()); } out.flush(); } /* пЕЙСПЯХБМШИ НАУНД ЩКЕЛЕМРНБ ДНЙСЛЕМРЮ, МЮВХМЮЪ Я СЙЮГЮММНЦН ЩКЕЛЕМРЮ node. */ public void viewLogAsXML(Node node,String offs){ if (node == null) { return; } int type = node.getNodeType(); // оНКСВЕМХЕ ХМТНПЛЮЖХХ Н РХОЕ РЕЙСЫЕЦН СГКЮ switch (type) { /* еЯКХ РЕЙЫХИ СГЕК - ЙНПМЕБНИ ЩКЕЛЕМР ДНЙСЛЕМРЮ */ case Node.DOCUMENT_NODE: { out.println("<?xml version=\"1.0\" encoding=\"koi-8\"?>"); viewLogAsXML(((Document)node).getDocumentElement(),offs); out.flush(); break; } /* еЯКХ РЕЙЫХИ СГЕК - ЩКЕЛЕМР */ case Node.ELEMENT_NODE: { out.print(offs+"<"); // оЕВЮРЭ МЮГБЮМХЪ ЩКЕЛЕМРЮ out.print(node.getNodeName()); // оНКСВЕМХЕ ЯОХЯЙЮ ЮРПХАСРНБ РЕЙСЫЕЦН ЩКЕЛЕМРЮ NamedNodeMap attrs = node.getAttributes(); Node attr; for (int i = 0; i < attrs.getLength(); i++) { attr = attrs.item(i); out.print(' '); out.print(attr.getNodeName()+"=\""+attr.getNodeValue()+"\""); } out.println('>'); // оНКСВЕМХЕ ЯОХЯЙЮ ДНВЕПМХУ ЩКЕЛЕМРНБ NodeList children = node.getChildNodes(); // еЯКХ С РЕЙЫЕЦН ЩКЕЛЕМРЮ ЕЯРЭ ДНВЕПМХЕ, РН БШБНДХЛ Х ХУ if (children != null) { int len = children.getLength(); for (int i = 0; i < len; i++) { viewLogAsXML(children.item(i),offs+" "); } } break; } /* еЯКХ РЕЙЫХИ СГЕК - РЕЙЯРНБШИ */ case Node.TEXT_NODE: { out.println(offs+node.getNodeValue()); break; } } // оЕВЮРЭ ГЮЙПШБЮЧЫЕЦН РЩЦЮ ЩКЕЛЕМРЮ if (type == Node.ELEMENT_NODE) { out.print(offs+"</"); out.print(node.getNodeName()); out.println('>'); } } //======================================================= // бШБНД Б ТНПЛЮРЕ HTML //===================== /* бШГНБ ПЕЙСПЯХБМНЦН НАУНДВХЙЮ */ public void viewLog(){ // Header viewAsHTML("All log records:"); try { // бШБНД ЯНДЕПФХЛНЦН viewLog(null); } catch (Exception e) { System.out.println(e.toString()); } // Header viewAsHTML(); } /* оЕВЮРЭ РНКЭЙН ЯННАЫЕМХИ НА НЬХАЙЮУ */ public void viewErrors(){ // Header viewAsHTML("Log errors:"); try { // бШБНД ЯНДЕПФХЛНЦН viewLog("error"); } catch (Exception e) { System.out.println(e.toString()); } // Footer viewAsHTML(); } /* пЕЙСПЯХБМШИ НАУНД ЩКЕЛЕМРНБ, С ЙНРНПШУ ЮРПХАСР type ПЮБЕМ ГЮДЮММНЛС. */ public int viewLog(String type){ int i=0; int elemNum=0; int messageCount=0; Element elem; NodeList elements; elements = xmldoc.getElementsByTagName("event"); if(elements==null) System.out.println("Empty element collection"); elemNum = elements.getLength(); if (type == null) { for (i = 0; i < elemNum; i++) { if(elements.item(i)==null) System.out.println("Empty element"); viewLogMessage((Element)elements.item(i)); } messageCount=elemNum; } else { for (i = 0; i < elemNum; i++) { elem = (Element)elements.item(i); if(elem.getAttribute("type")==type){ messageCount++; viewLogMessage(elem); } } } return messageCount; } /* оЕВЮРЭ ГЮЦНКНБЙЮ РЮАКХЖШ */ public void viewAsHTML(String title){ out.println("<html>"); out.println("<head><title>Log parser sample</title></head>"); out.println("<body><br><b>"+title+"</b><hr>"); out.println("<table cellspacing=\"2\" cellpadding=\"2\" border=\"1\" width=\"600\">"); out.println("<tr bgcolor=\"silver\"><th>IP</th><th>Date</th><th>Method</th><th>Request</th><th>Response</th></tr>"); } /* оЕВЮРЭ ЙНЛЛЕМРЮПХЕБ Й РЮАКХЖЕ */ public void viewAsHTML(){ Date d = new Date(); String date = new String(""+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()); out.println("</table><hr>generated by logParser at <i>"+date+"</i><br></body></html>"); out.flush(); } /* тНПЛЮРХПНБЮММШИ БШБНД ЯНДЕПФХЛНЦН ЩКЕЛЕМРЮ event */ public void viewLogMessage(Element elem){ /* оНКСВЕМХЕ РЕЙЯРЮ БМСРПХ ЩКЕЛЕМРЮ - НАПЮЫЮЕЛЯЪ Й ОЕПБНЛС ДНВЕПМЕЛС СГКС (ХЛ ДНКФЕМ НЙЮГЮРЭЯЪ РЕЙЯР) Х ОНКСВЮЕЛ ЕЦН ГМЮВЕМХЕ, ХЯОНКЭГСЪ ЛЕРНД getNodeValue() ХМРЕПТЕИЯЮ Node */ String str_from=(elem.getElementsByTagName("ip-from")).item(0).getFirstChild().getNodeValue(); String str_method=(elem.getElementsByTagName("method")).item(0).getFirstChild().getNodeValue(); String str_to=(elem.getElementsByTagName("url-to")).item(0).getFirstChild().getNodeValue(); String str_result=(elem.getElementsByTagName("response")).item(0).getFirstChild().getNodeValue(); out.println("<tr><td>"+str_from+"</td><td>"+elem.getAttribute("date")+"</td><td>"+str_method+"</td><td>"+str_to+"</td><td>"+str_result+"</td></tr>"); } //======================================================= // лНДХТХЙЮЖХЪ ДЕПЕБЮ ЩКЕЛЕМРНБ //============================= public void logMessage(String result, String datetime, String method, String ipfrom, String urlto, String response){ if(xmldoc==null) return; Element root = xmldoc.getDocumentElement(); Element log_elem = xmldoc.createElement("event"); log_elem.setAttribute("result",result); log_elem.setAttribute("date",datetime); Element elem; Text elem_value; elem = xmldoc.createElement("method"); elem_value = xmldoc.createTextNode(method); elem.appendChild(elem_value); log_elem.appendChild(elem); elem = xmldoc.createElement("ip-from"); elem_value = xmldoc.createTextNode(ipfrom); elem.appendChild(elem_value); log_elem.appendChild(elem); elem = xmldoc.createElement("url-to"); elem_value = xmldoc.createTextNode(urlto); elem.appendChild(elem_value); log_elem.appendChild(elem); elem = xmldoc.createElement("response"); elem_value = xmldoc.createTextNode(response); elem.appendChild(elem_value); log_elem.appendChild(elem); root.appendChild(log_elem); } //======================================================= // оПХЛЕП ХЯОНКЭГНБЮМХЪ ЛЕРНДНБ ЙКЮЯЯЮ logParser //============================================== public static void main(String argv[]) { /* яНГДЮМХЕ НАЗЕЙРЮ ЮМЮКХГЮРНПЮ. б ЙЮВЕЯРБЕ ОЮПЮЛЕРПЮ ЕЛС ОЕПЕДЮЕРЯЪ МЮГБЮМХЕ ДНЙСЛЕМРЮ(ЛНФМН Х ВЕПЕГ ЙНЛЮМДМСЧ ЯРПНЙС, ЙНМЕВМН...) */ logParser log_file = new logParser("log.xml"); log_file.parseDoc(); // юМЮКХГ ДНЙСЛЕМРЮ if (argv.length == 0) { // вРН Я МХЛ ДЕКЮРЭ log_file.viewLogAsXML(); System.exit(0); } for (int i = 0; i < argv.length; i++) { String arg = argv[i]; if (arg.startsWith("-")) { if (arg.equals("-vx")) { log_file.viewLogAsXML(); break; } if (arg.equals("-va")) { log_file.viewLog(); break; } if (arg.equals("-ve")) { log_file.viewErrors(); break; } if (arg.equals("-h")) { usage(); } } } log_file.logMessage("success","12","GET","127.0.0.1","./index.html","200"); log_file.viewLogAsXML(); } private static void usage() { System.err.println("usage: java logParser (options)"); System.err.println(); System.err.println("options:"); System.err.println(" -vx View result as XML tree (default)"); System.err.println(" -va View all messages as HTML page"); System.err.println(" -ve View only errors as HTML page"); System.err.println(" -h View help "); } }
йНЛЛЕМРЮПХХ
аНКЕЕ ОНДПНАМШЕ ЙНЛЛЕМРЮПХХ, ТЮИКШ ОПХКНФЕМХИ Х ПЕГСКЭРЮРНБ ХУ ПЮАНРШ ЛНФМН МЮИРХ ОН ЮДПЕЯС www.mrcpk.nstu.ru/xml/
|