javascript - 使用 XSLT 和 CSS 加载/转换 XML

标签 javascript css xml xslt

完全新手。提前致谢。开始了:

我正在尝试使用 XSL 样式表转换 XML 文档,并且 XSL 样式表链接到 CSS 文件。当我在浏览器 (Chrome) 中从我的计算机打开 XML 文件时,数据会在 XSL 和 CSS 文件之后正确显示。我在 XSL 样式表中也有 javascript 数学函数,用于从 XML 文件中获取元素并将其乘以不同的百分比。这个数学也有效。

但是当我尝试使用 Javascript(如下)在 HTML 中加载/转换 XML 文档时,XSL 样式出现了,但 CSS 关闭了。在 Chrome 中,CSS 显示的页面布局。但是字体太小,背景图片没有出现。无论我在 CSS 中进行什么更改,字体都非常小,几乎无法辨认。在 IE 中,CSS 根本不显示。

此外,Javascript 似乎隐藏了 xml 数据,我猜这对 SEO 不利。

有人有任何提示/不同的方法吗?我不能使用 ASP,因为我的网络服务器不允许,但其他任何东西都不允许。

这是我的 html 文档中的脚本:

<html>
<head>
  <script>
  function loadXMLDoc(dname) {
    if (window.XMLHttpRequest) {
      xhttp = new XMLHttpRequest();
    } else {
      xhttp = new ActiveXObject("Microsoft.XMLHTTP");  
    } 
    xhttp.open("GET",dname,false);
    xhttp.send("");
    return xhttp.responseXML;
  }

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

    // code for IE
    if (window.ActiveXObject) {
      ex = xml.transformNode(xsl);  
      document.getElementById("example").innerHTML = ex;
    }

    // code for Mozilla, 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>

谢谢水桶。

艾伦

最佳答案

这实际上取决于 works.xml 和 works.xsl 的内容。建议:将 resultDocument 吐出到文本区域中,然后查看 html 是否正常。那时你还可以在 Chrome/IE 中保存=>加载 html resultDocument 并确保它看起来不错。

一旦您知道 html 中的内容导致了问题,就可以更轻松地找到原因并进行修复。

您可以通过添加以下内容来查看输出 html:

<textarea cols="255" rows="50" id="textarea1"></textarea>

在您的示例 div 标记下方。
和:

document.getElementById("textarea1").value = document.getElementById("example").innerHTML;

在 displayResult() 的末尾。查看输出。

请注意您的 xslt 是一个片段而不是整个 html 文档,它不应该包含 html/head/body 标签,并且看起来或多或少像下面这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">

    <!--<html>

      <head>-->

        <link rel="stylesheet" href="galleryCSS.css" type="text/css" />

      <!--</head>


      <body>-->

        <h2>Choosy Child Guaranteed BuyBack System</h2>

        <ul class="gallery">

          <xsl:for-each select="WORKS/item">
            <li>

              <a href="picture1.jpg">
                <img src="picture1.jpg" alt="image" />
              </a>
              <em>
                <xsl:value-of select="name"/>
              </em>
              <br />
              Buy Price: <em>
                $<xsl:value-of select="price"/>
              </em>
              <br />
              1-4 Day BuyBack: <em>
                $<script type="text/javascript">
                  x=<xsl:value-of select="price"/>*.15;             document.write(Math.round(x*100)/100);
                </script>
              </em>
              <br />
              5-7 Day BuyBack: <em>
                $<script type="text/javascript">
                  x=<xsl:value-of select="price"/>*.25;             document.write(Math.round(x*100)/100);
                </script>
              </em>
              <br />
              8-14 Day BuyBack: <em>
                $<script type="text/javascript">
                  x=<xsl:value-of select="price"/>*.40;             document.write(Math.round(x*100)/100);
                </script>
              </em>
              <br />
              15-30 Day BuyBack: <em>
                $<script type="text/javascript">
                  x=<xsl:value-of select="price"/>*.60;             document.write(Math.round(x*100)/100);
                </script>
              </em>
              <br />
              30+ Day Buyback: <em>
                $<script type="text/javascript">
                  x=<xsl:value-of select="price"/>*.75;             document.write(Math.round(x*100)/100);
                </script>
              </em>

            </li>

          </xsl:for-each>

        </ul>


<!--
      </body>
    </html>-->

  </xsl:template>

</xsl:stylesheet>

还有其他方法可以缩短和简化代码并且不重复脚本标记,但这不在本问题的讨论范围之内。

关于javascript - 使用 XSLT 和 CSS 加载/转换 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780803/

相关文章:

javascript - es6中如何解析函数参数名称

javascript - 将负载添加到原始 JavaScript 事件

javascript - 使用 jQuery 中的 Javascript 变量中的 html 节点?

javascript - Json.stringify() 函数以正确的格式输出结果

html - 我如何在 bootstrap 3 中将输入组与表单组对齐

javascript - 动态生成 div 时 div 排序不起作用

css - 减少导航栏;选择和按钮在同一行

ruby-on-rails - 使用 ActiveRecord::Serialization.to_xml 构建动态字段

java - 如何简洁地用 Java 构建 XML 文档?

python xml - 使用正则表达式搜索属性