Php 如何将CSS格式化应用于XSL表单输入字段
所以,我有一个复杂的小doo-dad的网页,可以创建MADLIB类型的故事。故事采用XML格式,如下所示:Php 如何将CSS格式化应用于XSL表单输入字段,php,html,css,xml,xslt,Php,Html,Css,Xml,Xslt,所以,我有一个复杂的小doo-dad的网页,可以创建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">t
<?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>
<?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>
我记得9点左右睡觉。
在梦中,我躺在一张桌子上
没有门窗的奇怪房间。
“body”标记的所有子项(如“Num1”、“N1”和“PN1”)都使用和XSL表处理为HTML表单,如下所示:
<?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>
<?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>
:
由此,将创建一个表单,该表单显示基于子元素的类的标签,以及表单数据的输入框。比如:
编号:______;名词:u_____
复数名词:uuuuuuuuuuuuuuuu
提交
假设我输入25表示“数字”,输入Frog表示“名词”,输入Trees表示“复数名词” 输入并提交表单数据后,表单数据将通过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>
documentElement->childNodes作为$child){
如果($child->nodeType==XML\u TEXT\u NODE){//保留文本节点
$text.=$child->wholeText;
}else如果(数组\键\存在($child->tagName,$\ POST)){
//替换标记与POST变量匹配的节点
$text.=$\u POST[$child->tagName];
}else{//保留其他节点
$text.=$doc->saveXML($child);
}
}
//打印$text。“\n”;
<xsl:template match="Num1">
<label style="color: yellow">... </label>
</xsl:template>
}否则{
echo“解析XML失败\n”;
}
$xml=newdomdocument();
$root=$xml->createElement(“body”);
$xml->appendChild($root);
$bodyText=$xml->createTextNode($text);
$root->appendChild($bodyText);
//$xml->formatOutput=true;
打印“$xml->saveXML()”;
<xsl:template match="Num1">
<label style="color: yellow">... </label>
</xsl:template>
?>
当故事显示时,它将显示为:“我记得25点左右睡觉。 在我的梦中,我躺在一只青蛙身上 没有树也没有门的奇怪房间。” 所有这些都非常好,非常漂亮。不过,我想做的是分别格式化表单数据中的字段(25、Frog和Trees)。通过这种方式,我可以为它们添加下划线、颜色或粗体样式,使它们作为替换词从故事的其余部分中脱颖而出 有人知道我该怎么做吗 提前感谢,,
对于每个select=“*”使用
应用模板select=“*”
而不是,然后为您拥有的不同元素编写模板,例如
...
标签用于表单字段。我想要添加的是通过PHP处理的输入数据,以显示最终的故事。由于问题被标记为XSLT,我认为您需要这方面的帮助,很抱歉误解。那么,在哪里打印“$xml->saveXML()”
要应用CSS?当您只需将XML写入HTML文档时,我将从CSS样式化元素开始,例如在样式表中,您可以定义Num1{color:yellow;}
。显然,一种更干净的方法(它不依赖于HTML文档中间的未知XML元素的样式)将定义另一个XSLT样式表,并使用<代码> XSLTPrime< /C> > <代码> $XML<代码>。是的,我想我把事情弄得太复杂了。如果我只关注原始XML文件的格式化,那么不管输入或替换什么文本,它都应该完成。我要试一试。谢谢
<xsl:template match="Num1">
<label style="color: yellow">... </label>
</xsl:template>