XSL-результат преобразования DOMXpath-> оценивать в php - PullRequest
0 голосов
/ 28 сентября 2011

у меня есть:

$XML = new DOMDocument();
$XML->load('demo.xml');

$xpath = new DOMXpath($XML);
$elements = $xpath->evaluate($_GET["xpath"]);

$XSL = new DOMDocument();
$XSL->load('xml2json.xsl', LIBXML_NOCDATA);

$xslt = new XSLTProcessor();
$xslt->importStylesheet($XSL);

echo $xslt->transformToXML($elements);

Я получаю следующую ошибку:

( ! ) Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: Invalid Document in C:\wamp\www\content.php on line 18

Как мне преобразовать DOMNodeList в DOMDocument, чтобы эта работа работала?

Вот как я заставил это работать!

function getContent(&$NodeContent="",$nod)
{    $NodList=$nod->childNodes;
    for( $j=0 ;  $j < $NodList->length; $j++ )
    {       $nod2=$NodList->item($j);//Node j
        $nodemane=$nod2->nodeName;
        $nodevalue=$nod2->nodeValue;
        if($nod2->nodeType == XML_TEXT_NODE)
            $NodeContent .=  $nodevalue;
        else
        {     $NodeContent .= "<$nodemane";
           $attAre=$nod2->attributes;
           foreach ($attAre as $value)
              $NodeContent .=" {$value->nodeName}='{$value->nodeValue}'" ;
            $NodeContent .=">";                    
            getContent($NodeContent,$nod2);                    
            $NodeContent .= "</$nodemane>";
        }
    }

}


$XML = new DOMDocument();
$XML->load('demo.xml');

$xpath = new DOMXpath($XML);
$elements = $xpath->query($_GET["xpath"]);

$XSL = new DOMDocument();
$XSL->load('xml2json.xsl', LIBXML_NOCDATA);

$xslt = new XSLTProcessor();
$xslt->importStylesheet($XSL);

$newdoc = new DOMDocument;
$newdoc -> preserveWhiteSpace = false;
$newdoc -> formatOutput = true; 

$elm = $elements->item(0);
getContent($docstring,$elm);
$docstring = '<root>'.$docstring.'</root>';
$docstring = str_replace(array("\r\n", "\r", "\n", "\t"), '', $docstring);
$newdoc -> LoadXML($docstring);
echo $xslt->transformToXML($newdoc);

1 Ответ

1 голос
/ 28 сентября 2011

Вы делаете

$elements = $xpath->evaluate($_GET["xpath"]);
…
echo $xslt->transformToXML($elements);

Возвращаемые значения для DOMXPath::evaluate():

Возвращает типизированный результат, если это возможно, или DOMNodeList, содержащийвсе узлы, соответствующие данному выражению XPath.Если выражение искажено или контекстный узел недействителен, DOMXPath::evaluate() возвращает FALSE.

Подпись метода для transformToXML() состояний

string XSLTProcessor::transformToXML ( DOMDocument $doc )

Другими словами, вы не передаете DOMDocument и получаете «Неверный документ»"ошибка.

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