14.09.2004 14:55:55Может нельзя на JavaScript использовать XML5 ? Ответов: 8
timda
собственно в веб браузере на javascript можно использовать парсер XML5, если да - то как )
 
Ответы:
14.09.2004 17:32:49Ирина
Да, можно.
Найдите в MSDN или в Интернете файл msxml.js и посмотрите на его структуру.
Мне удалось найти версию этого файла для MSXML2.0 на VBScript:
http://gama.fsv.cvut.cz/~soucek/dp/convert/dtd/
Но принцип, я думаю, Вы поймёте.

Успехов!
14.09.2004 19:12:23timda
идея неплохая ...
вопрос весь в только в том, что JS - это просто синтаксис ... а есть JS + IE
и WSH
не получается ...
15.09.2004 10:23:35timda
я не говорю о том что WSH низя использовать в JS,

var wsh = new ActiveXObject(’WScript.Shell’)
wsh.Exec(’calc.exe’);

это работает
как с помощью WSH на JS создать XMLDocument - вот чего не пойму

но наверняка можно ;-)
15.09.2004 13:15:22Александр
Вобщем-то в JS можно сделать все что угодно, даже через тот же ActiveX. Как описано в примерах создаватьобъекы DOMDocument нужной версии и делать все то же что можно делать на C++ через интерфейс IXMLDOMDocument/IXMLDOMDocument2. все это более чем подробно и с примерами описано в MSDN. Конечно имеется специфика, так что хотел бы уточнить какая именно задача стоит. Что именно нужно сделать в броузере пользователя?
15.09.2004 13:23:57timda
задач - пописать XML документ на JS в !браузере!

это в тему
http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=1194

вот мой пример который аксес денайдид
<html>
<head>
<title>Test</title>
</head>
<body>

<input type=text id=a value=" GO " size=50>
<input type=button name=btn onclick="f()" value=" GO ">

</body>
</html>

<script language=javascript>

// global variables
var xmldoc;
var xmldsig;
var cert;

// define the constants
var CAPICOM_LOCAL_MACHINE_STORE = 1;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_STORE_OPEN_READ_ONLY = 0;
var CAPICOM_STORE_OPEN_READ_WRITE = 1;
var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;

var DSIGNS = "xmlns:ds=&rsquo;http://www.w3.org/2000/09/xmldsig#&rsquo;";

function f()
{
cert = getCertificate();
flag = getXML("doc.xml");
signXML();
alert(2);
}

///////// Set the signature for signing. ////////
function getXML(fileName)
{
try {
xmldoc = WScript.CreateObject("Msxml2.DOMDOcument.5.0");
}
catch (e) {
alert("Msxml2.DOMDOcument.5.0.\nInstallation of mxsml5 is required to run this app.\n");
return false;
}

try {
xmldsig = WScript.CreateObject("Msxml2.MXDigitalSignature.5.0");
}
catch (e) {
alert("Msxml2.MXDigitalSignature.5.0.\nInstallation of mxsml5 is required to run this app.\n");
}

xmldoc.async = false;
xmldoc.preserveWhiteSpace = true;
xmldoc.validateOnParse = false;
xmldoc.resolveExternals = false;

if (!xmldoc.load(fileName)) {
alert("Can&rsquo;t load "+ fileName + "\n");
return false;
}
xmldoc.setProperty("SelectionNamespaces", DSIGNS);
xmldsig.signature = xmldoc.selectSingleNode(".//ds:Signature");
alert(xmldoc.selectSingleNode(".//ds:Signature"))

return true;
}

function getCertificate()
{
try {
var store = new ActiveXObject("CAPICOM.Store");
var cert = new ActiveXObject("CAPICOM.Certificate");
}
catch (e) {
alert("CAPICOM.Store.\nInstallation of CAPICOM.Store is required to run this app.\n");
}

store.Open(CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_WRITE);
var Certificates = store.Certificates.Select("a", "b", false);
var cert = null;
if( Certificates.Count > 0 )
{
cert = Certificates.Item(1);
}
return cert;
}

function signXML()
{
if (!xmldsig.signature)
{
alert("Invalid signature template\n");
return false;
}

var _key = cert.PrivateKey.ContainerName;
document.all.a.value = _key;
var oKey = xmldsig.createKeyFromCSP(1, "", _key, 0);

try {
var a = xmldsig.sign(oKey, 1);
}
catch (e)
{
alert(e.description);
}


}

</script>
15.09.2004 13:25:41Александр
Примеры о которых шла речь.

xsltTest.js

var oArgs = WScript.Arguments;

if (oArgs.length == 0)
{
WScript.Echo ("Usage : cscript xslt.js xml xsl");
WScript.Quit();
}
xmlFile = oArgs(0) + ".xml";
xslFile = oArgs(1) + ".xsl";

var xsl = new ActiveXObject("MSXML2.DOMDOCUMENT.4.0");
var xml = new ActiveXObject("MSXML2.DOMDocument.4.0");
xml.validateOnParse = false;
xml.async = false;
xml.load(xmlFile);

if (xml.parseError.errorCode != 0)
WScript.Echo ("XML Parse Error : " + xml.parseError.reason);

xsl.async = false;
xsl.load(xslFile);

if (xsl.parseError.errorCode != 0)
WScript.Echo ("XSL Parse Error : " + xsl.parseError.reason);

//WScript.Echo (xml.transformNode(xsl.documentElement));

try
{
WScript.Echo (xml.transformNode(xsl.documentElement));
}
catch(err)
{
WScript.Echo ("Transformation Error : " + err.number + "*" + err.description);
}
____________________________________

XSLT.js
main();

function main()
{
var doc = LoadDOM("test.xml");
var xsl = LoadDOM("test.xsl");

var str = doc.transformNode(xsl);
alert("\ndoc.transformNode:\n"+str);

var out = MakeDOM(null);
doc.transformNodeToObject(xsl, out);
alert("\ndoc.transformNodeToObject:\n"+out.xml);
}

function LoadDOM(file)
{
var dom;
try {
dom = MakeDOM(null);
dom.load(file);
}
catch (e) {
alert(e.description);
}
return dom;
}

function MakeDOM(progID)
{
if (progID == null) {
progID = "msxml2.DOMDocument.4.0";
}

var dom;
try {
dom = new ActiveXObject(progID);
dom.async = false;
dom.validateOnParse = false;
dom.resolveExternals = false;
}
catch (e) {
alert(e.description);
}
return dom;
}

function alert(str)
{
WScript.Echo(str);
}
__________________________________
test.js
var xmlstr = "<object><name>apple</name><color>Red</color></object>";
var xsltstr = &rsquo;<?xml version="1.0"?>&rsquo; +
&rsquo;<xsl:stylesheet &rsquo; +
&rsquo; version="1.0" &rsquo; +
&rsquo; xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> &rsquo;+
&rsquo; <xsl:output method="text"/> &rsquo;+
&rsquo; <xsl:template match="/object"> &rsquo;+
&rsquo; <xsl:value-of select="color"/> &rsquo;+
&rsquo; <xsl:text> </xsl:text> &rsquo;+
&rsquo; <xsl:value-of select="name"/> &rsquo;+
&rsquo; </xsl:template> &rsquo;+
&rsquo;</xsl:stylesheet>&rsquo;;

var xmldom, xsltdom;
try {
xmldom = new ActiveXObject("MSXML2.DOMDocument.4.0");
xmldom.validateOnParse = true;
xmldom.async = false;
xmldom.resolveExternals = false;
xmldom.loadXML(xmlstr);

xsltdom = new ActiveXObject("MSXML2.DOMDocument.4.0");
xsltdom.validateOnParse = true;
xsltdom.async = false;
xsltdom.resolveExternals = false;
xsltdom.loadXML(xsltstr);

output = xmldom.transformNode(xsltdom);
WScript.echo(output);
}
catch(err) {
WScript.echo(err.description);
}
________________________________
LoadXMLFile.js
// Instantiate a DOM object.
var doc = new ActiveXObject("msxml2.DOMDocument.4.0");
doc.async = false;
doc.resolveExternals = false;
doc.validateOnParse = false;

// Load an XML file into the DOM instance.
doc.load("test.xml");

// Display the content of the object.
alert("doc: "+doc.xml);

// Helper function:
function alert(str)
{
WScript.Echo(str);
}

Все это было найдено в MSDN при беглом просмотре по ключевым словам "msxml.exe" и mxsxml.js
15.09.2004 13:33:21timda
атличные примеры ;-) только иногда и МСДН не работает ;-)

см. выше
15.09.2004 13:45:28Александр
MSDN значит не работает? ;) а так пробовали? http://msdn.microsoft.com
кстати вот в нагрузку оттуда пример в котором на JS подписывается XML документ.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/dsigexamples_setrefjs.asp

Сейчас к сожалению выш код посмотреть не могу, поскольку немного занят. Возможно позднее.