2013-09-26 2 views
1

Как выбрать и вывести только первый g узел в данном документе SVG?Как фильтровать документ SVG/XML по имени корневого тега?

Это данные ввода SVG ($svg_doc):

<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" width="765" height="990" id="svg2" xml:space="preserve"> 
<metadata id="metadata8"> 
    <rdf:rdf> 
     <cc:work rdf:about=""> 
      <dc:format>image/svg+xml</dc:format> 
      <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type> 
     </cc:work> 
    </rdf:rdf> 
</metadata> 
<defs id="defs6"></defs> 
<g transform="matrix(1.25,0,0,-1.25,0,990)" id="g10"> 
    <g id="g11"> 
     <path d="m 14.875,768.812 0.203,-0.046 -0.687,-2.157 -6.157,0 0,0.219 0.313,0 c 0.332,0 0.57,0.11 0.719,0.328 0.082,0.125 0.125,0.41 0.125,0.86 l 0,5.14 c 0,0.489 -0.059,0.797 -0.172,0.922 -0.157,0.176 -0.383,0.266 -0.672,0.266 l -0.313,0 0,0.218 3.61,0 0,-0.218 c -0.43,0 -0.727,-0.043 -0.891,-0.125 -0.168,-0.086 -0.281,-0.188 -0.344,-0.313 -0.062,-0.125 -0.093,-0.422 -0.093,-0.89 l 0,-5 c 0,-0.325 0.031,-0.543 0.093,-0.657 0.039,-0.086 0.11,-0.148 0.203,-0.187 0.102,-0.043 0.411,-0.063 0.922,-0.063 l 0.578,0 c 0.614,0 1.04,0.047 1.282,0.141 0.25,0.094 0.472,0.25 0.672,0.469 0.207,0.226 0.41,0.593 0.609,1.093 z" id="path14"></path> 
    </g> 
</g> 
<g id="g23"></g> 
<g id="g24"></g> 
</svg> 

PHP код, который я пробовал:

<?php 
$dom = new DOMDocument; 
$dom->loadXml($svg_doc); 
echo $dom->getElementsByTagname('g')->item(0)->value; 
?> 

Результат плох:

Notice: Undefined property: DOMElement::$value in /home/... 

Это вот что должно быть:

<g transform="matrix(1.25,0,0,-1.25,0,990)" id="g10"> 
    <g id="g11"> 
     <path d="m 14.875,768.812 0.203,-0.046 -0.687,-2.157 -6.157,0 0,0.219 0.313,0 c 0.332,0 0.57,0.11 0.719,0.328 0.082,0.125 0.125,0.41 0.125,0.86 l 0,5.14 c 0,0.489 -0.059,0.797 -0.172,0.922 -0.157,0.176 -0.383,0.266 -0.672,0.266 l -0.313,0 0,0.218 3.61,0 0,-0.218 c -0.43,0 -0.727,-0.043 -0.891,-0.125 -0.168,-0.086 -0.281,-0.188 -0.344,-0.313 -0.062,-0.125 -0.093,-0.422 -0.093,-0.89 l 0,-5 c 0,-0.325 0.031,-0.543 0.093,-0.657 0.039,-0.086 0.11,-0.148 0.203,-0.187 0.102,-0.043 0.411,-0.063 0.922,-0.063 l 0.578,0 c 0.614,0 1.04,0.047 1.282,0.141 0.25,0.094 0.472,0.25 0.672,0.469 0.207,0.226 0.41,0.593 0.609,1.093 z" id="path14"></path> 
    </g> 
</g> 

Только первый корень g узел выбирается и выводится.

+0

Обратите внимание на обновление. – BlitZ

ответ

1

Попробуйте использовать DOMNode::C14N() метод:

echo $dom->getElementsByTagname('g')->item(0)->C14N(true); 

UPDv1:

Используйте DOMDocument::saveXML() метод. Более надежный.

$node = $dom->getElementsByTagname('g')->item(0); 
echo $dom->saveXML($node); 
Смежные вопросы