Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
Javascript将xml转换为json对象并保存为Javascript变量_Javascript_Jquery_Xml_Xslt - Fatal编程技术网

Javascript将xml转换为json对象并保存为Javascript变量

Javascript将xml转换为json对象并保存为Javascript变量,javascript,jquery,xml,xslt,Javascript,Jquery,Xml,Xslt,我想使用xsl将数据从复杂的xml结构读入json对象。 我的想法是这样的: <?xml version="1.0" encoding="UTF-8"?> <store> <book> <title>Tile 1</title> <price>500</price> </book> <book> <title&g

我想使用xsl将数据从复杂的xml结构读入json对象。 我的想法是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<store>
    <book>
        <title>Tile 1</title>
        <price>500</price>
    </book>
    <book>
        <title>Tile 2</title>
        <price>900</price>
    </book>
</store>

地砖1
500
地砖2
900
这是我的xsl文件

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/store">
        var books = [
            <xsl:for-each select="book">
                {title: "<xsl:value-of select="title"/>", price: "<xsl:value-of select="price"/>"},
            </xsl:for-each>
        ];
    </xsl:template>
</xsl:stylesheet>

var账簿=[
{标题:,价格:},
];
现在在客户端,我想使用jquery(或纯javascript)获取变量books,并在以后的脚本中使用它。但我不知道如何实现它


请帮帮我!提前谢谢

这就是你需要做的

xsltProcessor = new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  book= xsltProcessor.transformToFragment(xml, document);
  document.getElementById("example").appendChild(book);
资料来源:

=========================编辑============================

我修改了您的xslt文件,如下所示。确保内容在一行中。输出中不应该有任何换行符

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="text" omit-xml-declaration="yes" indent="no" />
    <xsl:template match="/store">
        {"books":[<xsl:for-each select="book">{"title": "<xsl:value-of select="title" />", "price": "<xsl:value-of select="price" />"}<xsl:if test="position()!=last()">,</xsl:if></xsl:for-each>]}
    </xsl:template>
</xsl:stylesheet>

{“书籍”:[{“标题”:“,”价格“:”},]}
下面是html内容。代码仅针对IE进行了修改。请在其他浏览器的“else”块中进行相应更改

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<script>
function loadXMLDoc(filename)
{
if (window.ActiveXObject)
  {
  xhttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
else 
  {
  xhttp = new XMLHttpRequest();
  }
xhttp.open("GET", filename, false);

try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}

function displayResult()
{
xml = loadXMLDoc("test.xml");
xsl = loadXMLDoc("test6.xsl");

// code for IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
  {
  ex = xml.transformNode(xsl);
  alert(ex);
  var obj = JSON.parse(ex);
  document.getElementById("example").innerHTML =JSON.stringify(obj["books"][0]);


  }
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
  {
  xsltProcessor = new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  resultDocument = xsltProcessor.transformToFragment(xml, document);
  document.getElementById("example").appendChild(resultDocument);
  }
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>

函数loadXMLDoc(文件名)
{
if(window.ActiveXObject)
{
xhttp=新的ActiveXObject(“Msxml2.XMLHTTP”);
}
其他的
{
xhttp=newXMLHttpRequest();
}
xhttp.open(“GET”,filename,false);
请尝试{xhttp.responseType=“msxml文档”}catch(err){}//IE11
xhttp.send(“”);
返回xhttp.responseXML;
}
函数displayResult()
{
xml=loadXMLDoc(“test.xml”);
xsl=loadXMLDoc(“test6.xsl”);
//IE代码
if(window.ActiveXObject | | xhttp.responseType==“msxml文档”)
{
ex=xml.transformNode(xsl);
警报(ex);
var obj=JSON.parse(ex);
document.getElementById(“示例”).innerHTML=JSON.stringify(obj[“books”][0]);
}
//Chrome、Firefox、Opera等的代码。
else if(document.implementation&&document.implementation.createDocument)
{
xsltProcessor=新的xsltProcessor();
导入样式表(xsl);
resultDocument=xsltProcessor.transformToFragment(xml,文档);
document.getElementById(“示例”).appendChild(resultDocument);
}
}

Hi Hirak,谢谢你的回答,我想问你:如何使用book变量?类似警报(书籍[0]。标题);或者类似的东西。@lemycanh我已经更新了我的答案。请检查,如果这有帮助,请接受答案