如何将CSS格式应用于XSL表单输入字段

时间:2015-08-10 18:44:09

标签: php html css xml xslt

所以,我有一个复杂的小网页创建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>

&#34;身体的所有孩子&#34;标签,例如&#34; Num1,&#34; &#34; N1,&#34;和&#34; PN1&#34;使用和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为&#34; Number&#34;,Frog为&#34; Noun&#34;和Trees for&#34; Plural Noun。&#34;

输入并提交表单数据后,表单数据将通过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>

当故事显示时,它将显示:

&#34;我记得在25点钟左右睡觉。            在我的梦中,我正躺在一只青蛙身上            没有树木或门的奇怪的房间。&#34;

所有这一切都很好,很好,花花公子。但是,我想要做的是分别从表单数据--25,Frog和Trees - 格式化字段。通过这种方式,我可以为它们添加下划线,颜色或粗体样式,使它们从故事的其余部分中脱颖而出,成为替换后的单词。

任何人都知道我该怎么做?

提前致谢, Mutant先生

1 个答案:

答案 0 :(得分:1)

而不是for-each select="*"使用apply-templates select="*",然后为您拥有的不同元素编写模板,例如

<xsl:template match="Num1">
  <label style="color: yellow">... </label>
</xsl:template>