目前我有一个XML文件和XSL文件。 XSL文件获取XML文件并在HTML中创建可编辑的表。我现在需要做的是能够单击一个按钮,表值保存在一个新的XML文件中。这样做的最佳方法是什么?似乎PHP对于制作XML文件很有用,但不知道如何从XSL制作的表中获取值。我希望用XSL做,但如果不是JavaScript或PHP。如果有人可以指出我正确的方向,即使只是告诉我哪种语言可以做到这一点我会非常感激。
XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="2">
<tr>
<th>firstname</th>
<th>lastname</th>
<th>age</th>
</tr>
<xsl:for-each select="people/person">
<tr>
<td><span contenteditable="true"><xsl:value-of select="firstname"/></span></td>
<td><span contenteditable="true"><xsl:value-of select="lastname"/></span></td>
<td><span contenteditable="true"><xsl:value-of select="age"/></span></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我想要的XML格式:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="table.xsl"?>
<people>
<person>
<firstname>John</firstname>
<lastname>Johnson</lastname>
<age>20</age>
</person>
</people>
更新:从这里Getting value from table cell in javascript...not jquery我现在得到一个值列表,但它们包含span标记,所以我得到了<span contenteditable="true">John</span>
。如何删除span标签,以便我得到“John”?以下是我正在使用的JavaScript。
function GetCellValues()
{
var table = document.getElementById('mytable');
for (var r = 0, n = table.rows.length; r<n; r++)
{
for (var c = 0, m = table.rows[r].cells.length; c<m; c++)
{
alert(table.rows[r].cells[c].innerHTML);
}
}
}
答案 0 :(得分:1)
在考虑某些事物的转变之前,你需要掌握的两个问题是:
通常您使用HTML表单,但这并不适用于您的情况,因此您需要拥有JavaScript并且可能需要Ajax调用。要收集您的数据,您可以使用:
function getCellValues() {
var total = [];
var table = document.getElementById('mytable');
for (var r = 0; r < table.rows.length; r++) {
var oneRow = [];
for (var c = 0; c < table.rows[r].cells.length; c++) {
oneRow.push(table.rows[r].cells[c].children[0].innerHTML);
}
total.push(oneRow);
}
// Here you would post it;
alert(JSON.stringify(total));
}
一些指示:
更好的收藏方式:
function getCellValues() {
var total = [];
var table = document.getElementById('mytable');
for (var r = 0; r < table.rows.length; r++) {
var oneRow = {};
oneRow.firstName = table.rows[r].cells[0].children[0].innerHTML;
oneRow.lastName = table.rows[r].cells[1].children[0].innerHTML;
oneRow.age = table.rows[r].cells[2].children[0].innerHTML;
total.push(oneRow);
}
// Here you would post it;
alert(JSON.stringify(total));
}
希望有所帮助。 (P.S。:JSON对象中的构建仅在decent browsers。
答案 1 :(得分:0)
如果您希望HTML元素的内容为纯文本,请使用textContent
属性(在大多数浏览器中实现的W3C DOM)或innerText
属性(旧的IE版本),例如
function getTextContent(element) {
return typeof element.textContent != 'undefined' ? element.textContent : element.innerText;
}
function GetCellValues()
{
var table = document.getElementById('mytable');
for (var r = 0, n = table.rows.length; r<n; r++)
{
for (var c = 0, m = table.rows[r].cells.length; c<m; c++)
{
alert(getTextContent(table.rows[r].cells[c]));
}
}
}
getTextContent
函数中的检查可能需要进行改进以适应所有类型的浏览器,以防一个人既不实现textContent
也不实现innerText
,在这种情况下是递归的遍历所有文本后代节点可以提供帮助。