javascript - 在 TextArea 中读取 XSLT 时删除命名空间

标签 javascript xslt xslt-1.0 xslt-2.0 exslt

我在项目目录中的 XSLT 文件中有以下 StyleSheet 信息,正在读取此文件并将其存储在 HTML 的 TextArea 中,然后我使用 javascript 读取 Textarea。

当我使用 document.getElementByID("TestAreaID").value 在 IE9+ 浏览器中读取文本区域时,它会自动删除 namespace ,因此无法在 IE9+ 浏览器中生成 PDF。当我在 Debug模式下添加 namespace 时,它会在 IE9+ 浏览器中打开。

<textarea id="TestAreaID>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format"
        xmlns:fox="http://xmlgraphics.apache.org/fop/extensions"
        xmlns:svg="http://www.w3.org/2000/svg"
        xmlns:java="http://xml.apache.org/xslt/java"
        xmlns:xalan="http://xml.apache.org/xalan"
        xmlns:barcode="http://barcode4j.krysalis.org/ns"
        xmlns:pagematrix="http://phi.thc.com/pagematrix"
        xmlns:math="xalan://java.lang.Math" extension-element-prefixes="math" version="1.1">

        <xsl:output method="xml" omit-xml-declaration="no" indent="yes" version="1.0" doctype-system="http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd" doctype-public="-//W3C//DTD SVG 20000802//EN"/>
</textarea>

在javascript中使用document.getElementByID("TestAreaID").value读取文本区域后,只返回以下信息

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" extension-element-prefixes="math" version="1.1">

        <xsl:output method="xml" omit-xml-declaration="no" indent="yes" version="1.0" doctype-system="http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd" doctype-public="-//W3C//DTD SVG 20000802//EN"/>

我很困惑为什么它没有完全读取 TextArea 值并省略一些命名空间,但它在 Chrome、FireFox 和 IE8 浏览器中工作正常。

下面是HTML代码

<textarea id="TestAreaID" name="TestAreaID_index_0" style="display:none">
  $formInputData.getField("PrintControl").getValue()
</textarea>

getField() 是一个静态方法,它读取并返回 xsl 文件内容,这会正确返回 xsl 文件内容,但是当我在 javascript 中读取它时, namespace 被删除

这是我们在 javascript 部分的内容

 var xmlText = document.getElementById("TestAreaID").value;                                             

  xmlText = xmlText.replace(/~1/g, "~");  // This gets set back to ampersand later
  xmlText = xmlText.replace(/~2/g, "<");


  if (window.DOMParser)
  {
    parser=new DOMParser();
    _xmlDoc=parser.parseFromString(xmlText,"text/xml");
  }
  else // Internet Explorer
  {
    _xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    _xmlDoc.async="false";
    _xmlDoc.loadXML(xmlText); 
  }
document.getElementById("TestAreaID").value = xmlText;

最佳答案

我提出的问题在下面的链接中得到了明确的回答

https://dzone.com/articles/domparsers-parsefromstring

关于javascript - 在 TextArea 中读取 XSLT 时删除命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38300171/

相关文章:

javascript - Node.js 与 mysql 来自 felixge 的设计和奇怪的行为

javascript - 迭代嵌套对象

java - 内存中具有外部函数 (functx) 的 XSLT

android - 命名空间 ID 是否存在或什么是 android :id from the XML point of view?

java - 按元素拆分 XML 文件

javascript - 调用 TypeScript 编译器作为 NPM 模块

javascript - Browserify 与 Polymer 和/或 AngularJS 兼容吗

xml - XSL 转换中命名空间的错误结果

xml - xslt 在模板中集成一个 xsl

PHP在XSLT1中注册了函数,如何用PHP返回XML片段?