PHP在提交XSL表单数据时调用原始XML文件

时间:2011-04-13 19:26:48

标签: php xml forms xslt request

我有一个页面,它使用与XSL样式表匹配的XML文件来创建表单。

XML文件是这样的:

<?xml version="1.0"?>
<?xml-stylesheet href="XSL/BasicForm.xsl" type="text/xsl"?>
<xml>
<title></title>
<entry1></entry1>
<enrty2></entry2>
<entry3></entry3>
</xml>

它引用的BasicForm.xsl文件创建表单是这样的:

<?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="xml">

<form method="POST" action="action.php">
<xsl:for-each select="child::*">
            <label>
                <xsl:value-of select="name()"/>: 
                <input name="{name()}" type="text" />
            </label>
            <br />
</xsl:for-each>  

<br/>
<input type="submit" value="Submit" name="submitButton"/>
<br/>

</form>
</xsl:template>
</xsl:stylesheet> 

如您所见,在提交表单时,会引用PHP文件进行表单处理和打印。 PHP文件如下所示:

<html>
<head></head>
<body >

<?php

$myFile = ;

$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);

$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);
    }
}
echo $text . "\n";
} else {
echo "Failed to parse XML\n";
}

?>

</body>
</html>

我需要做的是调用原始XML文件并将其与$ myFile变量匹配,以便使用表单的提交数据来处理它。我不能把绝对引用放在变量字段中,因为这个过程将使用多个文件(取决于用户点击的文件)。同样,我需要找到一种方法,在提交XSL表单时调用PHP脚本中的原始XML文件。

任何帮助都会很棒。

谢谢, ë

2 个答案:

答案 0 :(得分:0)

我并没有完全关注你“丢失”原始XML文件的内容。您可以随时url_encode xml文件的内容,并将其作为隐藏变量包含在呈现给最终用户的表单中。如果xml文件特别大,这可能是不可能的,但在此示例中只有4个值,您可以将XML作为post字段传递并在action.php中对其进行解码

答案 1 :(得分:0)

使用setParameter()解决问题,在转换之前将文件路径变量传递给PHP中的XSLT进程命令。然后将该参数称为post数据以调用原始XML文件路径。

电子