我在处理 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/