Javascript преобразовать XML в JSON объект и сохранить в Javascript VAR

0

Я хочу использовать 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>

И это мой 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>

Теперь на стороне клиента я хочу использовать jquery (или чистый javascript), чтобы получить книги переменных и использовать его позже в моем скрипте. Но я не знаю, как этого добиться.

Пожалуйста, помогите мне! Заранее спасибо!

Теги:
xslt

1 ответ

0
Лучший ответ

Это то, что вам нужно сделать

xsltProcessor = new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  book= xsltProcessor.transformToFragment(xml, document);
  document.getElementById("example").appendChild(book);

Источник: http://www.w3schools.com/xsl/xsl_client.asp

================== РЕДАКТИРОВАНИЕ =================================================================

Я изменил ваш файл 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>
  • 0
    Привет Хирак, спасибо за ваш ответ, я хочу спросить вас: как я могу использовать переменную книги? лайк оповещения (book [0] .title); или что-то типа того.
  • 0
    @lemycanh Я обновил свой ответ. Пожалуйста, проверьте, и если это поможет, пожалуйста, примите ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню