Необходимо извлечь поддерево XML перед обработкой процессором XSLT - PullRequest
1 голос
/ 16 января 2011

Я обрабатываю XML с XSL с PHP для вывода HTML.Все идет нормально.Вот мой код.

<?php

$xslDoc = new DOMDocument();
$xslDoc->load("content.xsl");

$xmlDoc = new DOMDocument();
$xmlDoc->load("content.xml");

    // some xpath/dom-query filtering to get 
    // subtree of loaded xml-file

$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);

?>  

Как вы можете видеть, это простой XSLT-процессор.Вывод работает хорошо.Например, в данном XML есть три узла-узла «узел»:

<root>
 <node>
  <subnode>..</subnode>
 </node>
 <node>
  <subnode>..</subnode>
 </node>
 <node>
  <subnode>..</subnode>
 </node>
</root>

Теперь я хочу просто пропустить второй узел через процессор XML.

Как я могу это сделать?1009 *

Крис

Ответы [ 2 ]

3 голосов
/ 16 января 2011

Согласно http://www.php.net/manual/en/xsltprocessor.transformtodoc.php, метод transformToDoc принимает любой узел DOM в качестве аргумента, чтобы вы могли получить доступ к $xmlDoc->getElementsByTagName('node')->item(1) и передать его в transformToDoc, а затем использовать saveXML или saveHTML, чтобы получить Строка XML или HTML, в зависимости от того, какой результат вы ищете.

1 голос
/ 16 января 2011

Я решил свою задачу самостоятельно, но спасибо за вашу заявку.

Вот мой код:

$xmlDoc = new DOMDocument();
$xmlDoc->preserveWhiteSpace = false;
$xmlDoc->load("content.xml");

$xpath = new DOMXPath($xmlDoc);
$query = '//ContentData/Content[1]/Headline';
$nodeList = $xpath->query($query);


$newDom = new DOMDocument('1.0','UTF-8');
$root = $newDom->createElement('root');
$root = $newDom->appendChild($root);


foreach ($nodeList as $domElement){
   $domNode = $newDom->importNode($domElement, true);
   $root->appendChild($domNode);
}

$newDom->saveXML();


$xslDoc = new DOMDocument();
$xslDoc->load("content.xsl");

$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);

echo $proc->transformToXML($newDom);    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...