Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XUL JavaScript中执行XSLT转换文件时出现问题_Javascript_Xml_Xslt_Xul - Fatal编程技术网

在XUL JavaScript中执行XSLT转换文件时出现问题

在XUL JavaScript中执行XSLT转换文件时出现问题,javascript,xml,xslt,xul,Javascript,Xml,Xslt,Xul,我正在研究XUL,并尝试使用JavaScript在XUL中执行XSLT处理器函数 我有一个JavaScript函数,可以将新记录更新到XML文件并保存XML文件。之后,我尝试执行XSLT处理器函数,但无法加载XSL和XML文件 function xslt() { var processor = new XSLTProcessor(); var testTransform = document.implementation.createDocument("", "test", null); //

我正在研究XUL,并尝试使用JavaScript在XUL中执行XSLT处理器函数

我有一个JavaScript函数,可以将新记录更新到XML文件并保存XML文件。之后,我尝试执行XSLT处理器函数,但无法加载XSL和XML文件

function xslt()
{
var processor = new XSLTProcessor();

var testTransform = document.implementation.createDocument("", "test", null);
// just an example to get a transform into a script as a DOM
// XMLDocument.load is asynchronous, so all processing happens in the
// onload handler
testTransform.addEventListener("load", onload, false);
testTransform.load("file://C:/mercredi.xml");
function onload() {
  processor.importStylesheet(testTransform);
}
}
我的工作环境是在windows中使用Eclipse、XulBooster。通常,要加载任何文件,我使用file://C:/mercredi.xml或C:/mercredi.xml;这两个文件路径在其他函数中都可以正常工作,甚至在JavaScript函数中也是如此,我使用了相同的文件路径来读取和保存XML文件

function xslt()
{
var processor = new XSLTProcessor();

var testTransform = document.implementation.createDocument("", "test", null);
// just an example to get a transform into a script as a DOM
// XMLDocument.load is asynchronous, so all processing happens in the
// onload handler
testTransform.addEventListener("load", onload, false);
testTransform.load("file://C:/mercredi.xml");
function onload() {
  processor.importStylesheet(testTransform);
}
}
1.我已从本网站复制了以下代码列表6:

然后我查看了Mozilla网站并按照说明进行操作,但仍然无法加载我的文件。 2.以下代码复制自本网站:

即使在这个函数中,我也无法加载XML文件

function xslt()
{
var processor = new XSLTProcessor();

var testTransform = document.implementation.createDocument("", "test", null);
// just an example to get a transform into a script as a DOM
// XMLDocument.load is asynchronous, so all processing happens in the
// onload handler
testTransform.addEventListener("load", onload, false);
testTransform.load("file://C:/mercredi.xml");
function onload() {
  processor.importStylesheet(testTransform);
}
}
这是我的JavaScript代码,用于执行XSLT处理器的处理函数

function saveFile(output, savefile) {

    //function from http://puna.net.nz/archives/Code/Mozilla%20XUL%20LOG%20-%20read%20local%20files%20and%20write%20local%20files.htm
    //var savefile = "c:\\mozdata.txt";

    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch (e) {
        alert("Permission to save file was denied.");
    }
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath( savefile );
    if ( file.exists() == false ) {
        alert( "File Updated Successfully ");
        file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
    }
    var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
        .createInstance( Components.interfaces.nsIFileOutputStream );
    /* Open flags
    #define PR_RDONLY       0x01
    #define PR_WRONLY       0x02
    #define PR_RDWR         0x04
    #define PR_CREATE_FILE  0x08
    #define PR_APPEND      0x10
    #define PR_TRUNCATE     0x20
    #define PR_SYNC         0x40
    #define PR_EXCL         0x80
    */
    /*
    ** File modes ....
    **
    ** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
    ** The 'mode' argument may be ignored by PR_Open on other platforms.
    **
    **   00400   Read by owner.
    **   00200   Write by owner.
    **   00100   Execute (search if a directory) by owner.
    **   00040   Read by group.
    **   00020   Write by group.
    **   00010   Execute by group.
    **   00004   Read by others.
    **   00002   Write by others
    **   00001   Execute by others.
    **
    */
    outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
    var result = outputStream.write( output, output.length );
    outputStream.close();
alert( "File Updated Successfully ");
clear();
process();

}
为什么要在XUL中执行XSLT文件?是在XML文件中为我的客户生成唯一的ID

function xslt()
{
var processor = new XSLTProcessor();

var testTransform = document.implementation.createDocument("", "test", null);
// just an example to get a transform into a script as a DOM
// XMLDocument.load is asynchronous, so all processing happens in the
// onload handler
testTransform.addEventListener("load", onload, false);
testTransform.load("file://C:/mercredi.xml");
function onload() {
  processor.importStylesheet(testTransform);
}
}
请帮帮我我做错了什么?!?多谢各位

这是我的XSLT文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="CONTACT">
        <xsl:copy>
               <Customer-Id>
               <xsl:value-of select="generate-id(.)"/> 
               </Customer-Id>
              <xsl:copy-of select="FirstName|LastName|gmail|yahoo| Hotmail |URL|Facebook-ID"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>
出于某种原因:

var testTransform = document.implementation.createDocument("", "test", null);

它不起作用

然后我意识到我在JavaScript中使用“readFile函数”来加载文件。我使用这个函数加载XUL中的任何文件

代码如下:

function process()
{ 
    var src = readFile("c:\\idgenerator.xsl");//load my XSl file
    var parsed = (new DOMParser()).parseFromString(src, "text/xml");
    var stylesheet = parsed.documentElement;
    var processor = new XSLTProcessor();
    processor.importStylesheet(stylesheet );

    objXMLDoc = processor.transformToDocument(objXMLDoc);//load & transform my XML file

    var serializer = new XMLSerializer();
    var prettyString = serializer.serializeToString(objXMLDoc);
    saveFile(prettyString, "C:\\mercredi.xml");//Save the XML file
} 

你忘了说你到底犯了什么错误。提示:逐字粘贴错误消息将有助于其他人以后找到此帖子不幸的是,错误控制台中没有关于此问题的错误消息。@karthik:即使没有错误消息,您仍然可以告诉我们您看到的确切症状。你怎么知道代码不起作用?预期的行为是什么,实际的行为是什么?@Larsh:我已经用警报消息验证过了。警报'1';transform.loadfile://C:/idgenerator.xsl;警报2';警报1起作用,但警报2不起作用。我的代码在transform.load停止工作@拉尔斯:我已经解决了这个问题。请告诉我如何发布解决方案?