我遇到了在XSL文件中处理多行XML值的问题。 例如,我有以下XML部分:
<book>
<id>1</id>
<content>qwerty
asdfg
zxcvb
</content>
</book>
我正在尝试使用XSL功能获取节点<content>
的值并将其写入HTML表格单元格,但它不起作用。
遵循JS代码我正在使用我的表中获取必要的单元格并在那里写一个多行值:
document.getElementById("row1").getElementsByTagName("td")[1].innerHTML = "<xsl:value-of select="book/content"/>";
使用单行值可以正常工作。我相信innerHTML属性无法读取多行值。还有其他机会解决我的问题吗?
谢谢!
答案 0 :(得分:1)
如果您不需要IE支持,那么
document.getElementById("row1").getElementsByTagName("td")[1].innerHTML = `<xsl:value-of select="book/content"/>`;
应该有用。
另一方面,如果您只针对IE,那么您可以利用XSLT处理器是一个支持调用JScript的MSXML版本,然后您可以使用JScript replace
方法来转义字符串中的换行符根据J {ava)脚本需要\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>