所以,我有这个复杂的小doodad的网页,创建MADLIB类型的故事。故事是XML格式,看起来像这样:
<?xml version="1.0"?>
<body>
I remember going to sleep around <Num1 class="Number">9</Num1> O'clock.
In my dream, I was laying on a <N1 class="Noun">table</N1> in a
strange room with no <PN1 class="Plural Noun">windows</PN1> or doors.
</body>
"body"标签的所有子标签,如"Num1"、"N1"answers"PN1",使用如下的XSL表处理成HTML表单:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/body">
<form method="post" action="Results.php" style="text-align:right;margin-top: 75px;margin-right:25%;">
<xsl:for-each select="child::*">
<label>
<xsl:value-of select="@class"/>:
<input name="{name()}" type="text" />
</label>
<br />
<input type="submit" value="Submit" name="submitButton"/>
</xsl:for-each>
</form>
</xsl:template>
</xsl:stylesheet>
由此创建一个表单,该表单显示基于子元素的类的标签,以及表单数据的输入框。例如:
数量 : _________
名词 : _________
复数名词:_________
提交
假设我输入25作为"数字",青蛙作为"名词",树木作为"复数名词"。
输入并提交表单数据后,将通过PHP处理表单数据,以替换原始故事中的子节点字符串。
<html>
<head><link rel="stylesheet" type="text/css" href="SFJPlaza.css"></head>
<body>
<div id="story">
<?php
$file = $_POST[filepath];
$open = fopen($file, 'r');
$theData = fread($open, filesize($file));
fclose($open);
$doc = DOMDocument::loadXML($theData, LIBXML_NOERROR);
if ($doc !== FALSE) {
$text = ''; // used to accumulate output while walking XML tree
foreach ($doc->documentElement->childNodes as $child) {
if ($child->nodeType == XML_TEXT_NODE) { // keep text nodes
$text .= $child->wholeText;
} else if (array_key_exists($child->tagName, $_POST)) {
// replace nodes whose tag matches a POST variable
$text .= $_POST[$child->tagName];
} else { // keep other nodes
$text .= $doc->saveXML($child);
}
}
//print $text . "'n";
} else {
echo "Failed to parse XML'n";
}
$xml = new DOMDocument();
$root = $xml->createElement("body");
$xml->appendChild($root);
$bodyText = $xml->createTextNode($text);
$root->appendChild($bodyText);
//$xml->formatOutput = true;
print "<pre>".$xml->saveXML() ."</pre>";
?>
</div>
</body>
</html>
当故事显示时,它将显示:
"我记得大约25点睡觉。在我的梦里,我躺在一只青蛙上一个陌生的房间,没有树,也没有门。"
所有这些都很好,很好,很好。但是,我想做的是分别格式化表单数据中的字段(25、Frog和Trees)。这样,我就可以给它们添加下划线、颜色或粗体样式,使它们作为替换的单词从故事的其他部分中脱颖而出。
有谁知道我该怎么做吗?
提前感谢,先生变异
使用apply-templates select="*"
代替for-each select="*"
,然后为您拥有的不同元素编写模板,例如
<xsl:template match="Num1">
<label style="color: yellow">... </label>
</xsl:template>