PHP для вызова оригинального XML-файла при отправке данных формы XSL - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть страница, которая использует файл XML, соответствующий таблице стилей XSL, для создания формы.

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, чтобы обработать его с помощью отправленных данных формы.Я не могу просто поместить абсолютную ссылку в поле переменной, потому что в этом процессе будет использоваться несколько файлов (в зависимости от того, на каком файле нажимает пользователь).Итак, еще раз, мне нужно найти способ вызова исходного XML-файла в сценарии PHP при отправке формы XSL.

Любая помощь будет полезна.

Спасибо, E

Ответы [ 2 ]

0 голосов
/ 16 апреля 2011

Проблема решена с помощью setParameter () для передачи переменной filepath в команду процесса XSLT в PHP непосредственно перед преобразованием. Затем параметр вызывался как данные поста для вызова исходного пути к файлу XML.

E

0 голосов
/ 13 апреля 2011

Я не совсем понимаю, где вы «теряете» содержимое исходного XML-файла.Вы всегда можете url_encode содержимого файла xml и включить его в качестве скрытой переменной в форму, предоставляемую конечному пользователю.Это может оказаться невозможным, если XML-файлы особенно велики, но в этом примере только с 4 значениями вы можете просто передать XML в качестве поля публикации и декодировать его в action.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...