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