gpt4 book ai didi

javascript - xsl 添加空白空间?

转载 作者:行者123 更新时间:2023-11-28 05:34:16 25 4
gpt4 key购买 nike

我有一个 sparql-results XML 文件。我从RD4J-Rest API 获取它。当我在 Notepad++ 中打开文件时,它符合预期:(示例)

<result>
<binding name='ilAbk'>
<literal>[A_2mim]Ll</literal>
</binding>
</result>

现在我使用 XSL 模板来格式化输出:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:res="http://www.w3.org/2005/sparql-results#">
<xsl:output method="xml" encoding="UTF-8" />

<xsl:template name="vb-result">
<table id="main">
<xsl:for-each select="res:results/res:result">
<tr id="{generate-id()}">
<xsl:apply-templates select="."/>
</tr>
</xsl:for-each>
</table>
</xsl:template>

<xsl:template match="res:result">
<xsl:variable name="current" select="."/>
<xsl:for-each select="/res:sparql/res:head/res:variable">
<xsl:variable name="name" select="@name"/>
<td>
<xsl:apply-templates select="$current/res:binding[@name=$name]"/>
</td>
</xsl:for-each>
</xsl:template>

<xsl:template match="res:sparql">
<xsl:call-template name="vb-result" />
</xsl:template>

</xsl:stylesheet>

在最终表中,[A_2mim]Ll 具有相同的字符数 (9)。但是,当我使用 JavaScript 访问它并将其显示在控制台中时,它会额外出现十个空字符。这是 JavaScript 部分:

function addRowHandlers() {
var table = document.getElementById("main");
var rows = table.getElementsByTagName("tr");
for (i = 0; i < rows.length; i++) {
var currentRow = table.rows[i];
var createClickHandler =
function(row)
{
return function() {
var cell = row.getElementsByTagName("td")[0];
var text = cell.innerHTML;
var rid = row.getAttribute("id");
console.log(text.length);
};
};

currentRow.onclick = createClickHandler(currentRow);
}
}

因为我想在下一个查询中使用这个名称,所以我需要删除这些字符。我知道我可以删掉它,但我想知道是否有人知道这些 Angular 色来自哪里。它在控制台中看起来很奇怪 - 这就是为什么我用 .length 检查它。

感谢您的宝贵时间。

最佳答案

这是因为您在此处选择了绑定(bind)元素的这一行

 <xsl:apply-templates select="$current/res:binding[@name=$name]"/>

问题是您没有与 res:binding 或其任何后代相匹配的模板。这意味着 XSLT 将使用其内置模板,最终选择所有后代文本节点。这包括用于缩进的 literal 元素之前和之后的空白节点。正是这个空白可能会给您带来令人困惑的结果。

有多种方法可以解决这个问题。首先,您可以在 xsl:output 命令后添加 xsl:strip-space 命令,告诉 XSLT 忽略仅包含空白的节点

 <xsl:strip-space elements="*" />

或者,您可以更具体地使用 xsl:apply-templates 并直接定位 literal 元素。

 <xsl:apply-templates select="$current/res:binding[@name=$name]/res:literal"/>

关于javascript - xsl 添加空白空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com