使用XSL和JS读取多行XML值

时间:2017-11-09 09:17:44

标签: javascript xml xslt

我遇到了在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属性无法读取多行值。还有其他机会解决我的问题吗?

谢谢!

1 个答案:

答案 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>