javascript - 使用 XSL 和 JS 读取多行 XML 值

标签 javascript xml xslt

我在处理 XSL 文件中的多行 XML 值时遇到了问题。 例如,我有以下 XML 部分:

<book>
    <id>1</id>
    <content>qwerty
             asdfg
             zxcvb
    </content>
 </book>

我正在尝试获取节点 <content> 的值使用 XSL 函数并将其写入 HTML 表格单元格,但它不起作用。

我使用以下 JS 代码在表格中获取必要的单元格并在那里写入多行值:

document.getElementById("row1").getElementsByTagName("td")[1].innerHTML = "<xsl:value-of select="book/content"/>";

对于单行值,它工作正常。我相信 innerHTML 属性无法读取多行值。还有其他机会可以解决我的问题吗?

谢谢!

最佳答案

如果你不需要IE支持那么

document.getElementById("row1").getElementsByTagName("td")[1].innerHTML = `<xsl:value-of select="book/content"/>`;

应该可以。

另一方面,如果您只针对 IE,那么您可以利用 XSLT 处理器是支持调用 JScript 的 MSXML 版本,然后您可以使用 JScript replace 方法来转义行根据 J(ava)Script 的需要在字符串中中断为 \n:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="http://example.com/user-functions"
    exclude-result-prefixes="msxsl user"
    version="1.0">

    <msxsl:script language="JScript" implements-prefix="user">
        function escapeLineBreaks(input) {
          if (typeof input != 'string') {
            input = input.item(0).text;
          }
          return input.replace(/\n/g, '\\n').replace(/\r/g, '\\r');
        }
    </msxsl:script>

    <xsl:template match="/">
        <html>
            <body>
                <table>
                    <tr id="row1">
                        <td>a</td>
                        <td></td>
                    </tr>
                </table>
                <script>
                    document.getElementById('row1').cells[1].innerHTML = "<xsl:value-of select="user:escapeLineBreaks(book/content)"/>";
                </script>
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

关于javascript - 使用 XSL 和 JS 读取多行 XML 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47197973/

相关文章:

javascript - 用 json 数据填充现有数组

javascript - 多个复选框下拉 onchange() 不起作用

javascript - addEventListener 与 getElementsByClassName

.net - 如何将 XPath 与 XElement 或 LINQ 一起使用?

xslt - XSLT 中的动态排序?

XSLT:迭代 xsl:key 映射的所有值

javascript - 我可以使用 'input' 和类型 'time' 来显示小时而不是分钟吗?

java - InflateException 二进制 XML 文件,第 7 行 : Error inflating class fragment

xml - 将节点添加到 XML 而不复制 xmlns =""属性

c# - 如何在 .NET XslCompiledTransform 中使用 XPath 表达式 "document(' ')"?应该吗?