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


PHP to call original XML file when XSL form data submitted

我有一个页面,它使用与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文件。

任何帮助都太好了。

谢谢,E

我不太明白您在哪里"丢失"了原始XML文件的内容。始终可以对xml文件的内容进行url_encode,并将其作为隐藏变量包含在呈现给最终用户的表单中。如果xml文件特别大,这可能不可行但在这个例子中,只有4个值你可以将xml作为post字段传递,然后在action。php

中解码

在转换之前使用setParameter()在PHP中将filepath变量传递给XSLT处理命令,解决了问题。然后将该参数作为post data调用,以调用原始XML文件路径。

E