就我所知,這只是以IE10開始的。爲什麼XSLT在IE10中添加換行符(回車)
這不是FF中的問題。
使用XMLHttpRequest來得到一些XML數據,然後使用XSLT顯示它...
XSLT轉換是自動看似隨機位置增加新的生產線,其中有在要素數據的空間。
如果我使用getElementsByTagName預覽數據,數據是完整的,沒有空間轉換爲換行符。
由於html將新行視爲空格,因此如果僅顯示文本或將其放置在輸入框中,則看不到問題,但是,如果數據存儲在隱藏元素中,並且使用警報函數可以看到輸出數據中有換行符/回車符。
如果在原始XML數據中的元素之後沒有回車符,則問題似乎更糟。在某些情況下,我實際上可以通過在每個元素之後添加回車來解決此問題。有些情況下,並非全部。
這幾乎就好像變壓器試圖讀取數據時爲了便於閱讀而在空間處分割數據一樣,它會自動添加回車符。
實施例:
xsltTest.htm
<!DOCTYPE html>
<html>
<head>
<title>xslt test</title>
<script type="text/javascript" language="javascript">
function loadFile(f) {
xhttp = new window.XMLHttpRequest
xhttp.open("GET", f, false)
xhttp.setRequestHeader("Cache-Control", "no-cache");
xhttp.setRequestHeader("pragma", "no-cache");
xhttp.send("")
//in IE10 this seems to show where the new lines get added
alert(xhttp.responseText)
var xml = xhttp.responseXML
displayData(xml, 'xsltTest.xslt', 'DataDiv')
}
function displayData(xmlResp, xslFile, targetObj) {
var xml = new ActiveXObject("MSXML2.DomDocument");
xml.async = false;
xml.load(xmlResp);
var xsl = new ActiveXObject("MSXML2.FreeThreadedDomDocument");
xsl.async = false;
xsl.load(xslFile);
xsl_template = new ActiveXObject("Msxml2.XSLTemplate")
xsl_template.stylesheet = xsl;
xslProc = xsl_template.createProcessor()
xslProc.input = xml
xslProc.transform()
document.getElementById(targetObj).innerHTML = xslProc.output
}
function popData(idx,e) {
alert(document.getElementById('data_'+idx+'_'+e).value)
}
</script>
</head>
<body>
<center>
<input type="button" id="WithCRButton" value="Load File WITH CarriageReturns" onclick="loadFile('DataWithCR.xml')" />
<input type="button" id="WithoutCRButton" value="Load File WITHOUT CarriageReturns" onclick="loadFile('DataWithoutCR.xml')" />
<div style="border:1px solid black;width:100%" id="DataDiv">
</div>
</center>
</body>
</html>
xsltTest.xslt
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<table>
<xsl:for-each select="TestData/field">
<tr>
<td>
<xsl:value-of select="elementData1"/>
</td>
<td>
<input type="hidden">
<xsl:attribute name="value"><xsl:value-of select="elementData1"/></xsl:attribute>
<xsl:attribute name="id">data_<xsl:value-of select="position()"/>_1</xsl:attribute>
</input>
<input type="button" value="show hidden value">
<xsl:attribute name="onclick">popData('<xsl:value-of select="position()"/>','1')</xsl:attribute>
</input>
</td>
<td>
<xsl:value-of select="elementData2"/>
</td>
<td>
<input type="hidden">
<xsl:attribute name="value"><xsl:value-of select="elementData2"/></xsl:attribute>
<xsl:attribute name="id">data_<xsl:value-of select="position()"/>_2</xsl:attribute>
</input>
<input type="button" value="show hidden value">
<xsl:attribute name="onclick">popData('<xsl:value-of select="position()"/>','2')</xsl:attribute>
</input>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
DataWithCR.xml
<TestData>
<field>
<elementData1>ThisHasNoSpaces</elementData1>
<elementData2>ThisHasA Space</elementData2>
</field>
<field>
<elementData1>ThisHasNoSpaces</elementData1>
<elementData2>ThisHasA Space</elementData2>
</field>
<field>
<elementData1>ThisHasNoSpaces</elementData1>
<elementData2>ThisHasA Space</elementData2>
</field>
<field>
<elementData1>ThisHasNoSpaces</elementData1>
<elementData2>ThisHasA Space</elementData2>
</field>
</TestData>
DataWithoutCR.xml
<TestData><field><elementData1>ThisHasNoSpaces</elementData1><elementData2>ThisHasA Space</elementData2></field><field><elementData1>ThisHasNoSpaces</elementData1><elementData2>ThisHasA Space</elementData2></field><field><elementData1>ThisHasNoSpaces</elementData1><elementData2>ThisHasA Space</elementData2></field><field><elementData1>ThisHasNoSpaces</elementData1><elementData2>ThisHasA Space</elementData2></field></TestData>
它是否有助於增加'的 在樣式表前的''的'? –
FrankPl
你可以把什麼輸出實際上,它應該是什麼? – 2013-08-07 05:23:58
輸出很難包含,但會發生的是,當警報框顯示數據「ThisHasA空間」時,「A」和「空間」之間的回車不在原始數據中。 – EddieB