客户端上的 XSLT 转换以避免 JavaScript 的 CORS

Posted

技术标签:

【中文标题】客户端上的 XSLT 转换以避免 JavaScript 的 CORS【英文标题】:XSLT transformation on client to avoid CORS with JavaScript 【发布时间】:2021-11-10 16:03:33 【问题描述】:

我有一个文本区域,我在其中粘贴一个 XML 文件并使用简单的 javascript 将其转换为 JSON。 我想用 XSLT 修改客户端上的 Xhtml 并生成一个将转换为 JSON 的新 XML。 我总是收到 CORS 错误。

我的代码是:

<textarea id="xmltext" name="xmltext"></textarea>
<button onclick="xml2xslt()">transform</button>    


function xml2xslt()
  var xslStylesheet;
  var xsltProcessor = new XSLTProcessor();
  var myDOM;
  var xmlDoc;

  var xhr = new XMLHttpRequest();
  xhr.open("GET", "<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><h2>My CD Collection</h2><table border="1"><tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr><xsl:for-each select="catalog/cd"><tr><td><xsl:value-of select="title"/></td><td><xsl:value-of select="artist"/></td></tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>", false);

  xhr.overrideMimeType("text/xml")
  xhr.send(null);

  xslStylesheet = xhr.responseXML;
  xsltProcessor.importStylesheet(xslStylesheet);

  // load the xml file
  xhr = new XMLHttpRequest();
  xhr.open("GET", "<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?><catalog><cd><title>Empire Burlesque</title><artist>Bob Dylan</artist><country>USA</country><company>Columbia</company><price>10.90</price><year>1985</year></cd></catalog>", false);
  xhr.overrideMimeType("text/xml")
  xhr.send(null);

  xmlDoc = xhr.responseXML;
  var fragment = xsltProcessor.transformToFragment(xmlDoc, document);
  document.getElementById("xmltext").textContent = "";
  myDOM = fragment;
  document.getElementById("xmltext").appendChild(fragment);
 

我应该在 xhr.open("GET",url,false); 的 url 中放置什么路径获取xml代码? xsl 代码可以硬编码,因为我只是删除了标签的前缀。

如何将新的xml导出为JSON.parse()呢?

【问题讨论】:

【参考方案1】:

如果您将 XML 和/或 XSLT 数据作为字符串,则使用 DOMParser 解析它们,例如

 xslStylesheet = new DOMParser().parseFromString(yourXSLTString, 'application/xml');

然后将该xslStylesheet 文档传递给XSLTProcessorimportStylesheet 方法。不需要使用XMLHttpRequest

对 XML 文档执行相同的操作,例如

xmlDoc = new DOMParser().parseFromString(`<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?><catalog><cd><title>Empire Burlesque</title><artist>Bob Dylan</artist><country>USA</country><company>Columbia</company><price>10.90</price><year>1985</year></cd></catalog>`, 'application/xml');

【讨论】:

非常感谢......我错过了 嗨马丁,需要***.com/questions/69207608/…的帮助

以上是关于客户端上的 XSLT 转换以避免 JavaScript 的 CORS的主要内容,如果未能解决你的问题,请参考以下文章

xslt 不会选择在 XSLT 转换中动态更改名称空间以进行进一步转换

XSLT 转换以消除嵌套

需要 XSLT 转换以删除重复元素 - 按属性排序

SOA 转换中的 XSLT 映射以获取上个月的最大日期

在 XSLT 中对记录进行分组时如何避免 O(n^2) 复杂性?

使用 XSLT 将 XML 转换为 CSV,用于在单个标记中以空格分隔的多个记录