簡體   English   中英

如何使用PHP獲取SVG標記內容

[英]How to get SVG tag content with PHP

我想用PHP獲取SVG標記內容。

test.svg:

<?xml version="1.0" encoding="utf-8"?>
<!-- comment  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 width="202.5px" height="226.084px" viewBox="0 0 202.5 226.084" enable-background="new 0 0 202.5 226.084" xml:space="preserve">
   <g>
        <path d="M0,13.628c47.7940,13.628z"/>
        <polygon points="108.48,207.874 145.506,196.948 145.506,204.536 108.48,214.854  "/>
        <path fill="none" stroke="#000000" d="M114.55,223.959"/>
   </g>
   <g>       
        <path fill="none" stroke="#000000" d="M114.55,223.959"/>
   </g>
   <anythingElse>       
        <path fill="none" stroke="#000000" d="M114.55,223.959"/>
   <anythingElse>       
</svg>

PHP:

$svg = new SimpleXMLElement( file_get_contents( 'test.svg' )  );

$svg->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');
$svg->registerXPathNamespace('xlink', 'http://www.w3.org/1999/xlink');

現在,我想將svg標記內容作為字符串。

期望的結果(硬編碼示例):

$content =  '<g>
    <path d="M0,13.628c47.7940,13.628z"/>
    <polygon points="108.48,207.874 145.506,196.948 145.506,204.536 108.48,214.854  "/>
    <path fill="none" stroke="#000000" d="M114.55,223.959"/>
</g>
   <g>       
        <path fill="none" stroke="#000000" d="M114.55,223.959"/>
   </g>
   <anythingElse>       
        <path fill="none" stroke="#000000" d="M114.55,223.959"/>
   <anythingElse> ';

//編輯:

我不想尋找g標簽:'/ svg:svg / svg:g'。 由於無法保證svg內部會有ag標簽。 可能有超過一個g標簽或一些其他標簽。

我想獲得開始和結束svg標簽之間的所有內容。

您已經看到了正確的(更可能是:從先前的答案中提供給您的示例代碼中復制並粘貼,無需進一步了解)您需要在此處為​​xpath注冊XML命名空間,因為沒有前綴對於它在XML中:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 width="202.5px" height="226.084px" viewBox="0 0 202.5 226.084" enable-background="new 0 0 202.5 226.084" xml:space="preserve">

它只是URI http://www.w3.org/2000/svg ,沒有給出前綴。 它是<svg>根元素名稱空間。

因此,您需要注冊前綴(另一個已經有前綴的命名空間應該已經自動注冊):

$svg->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');

你到目前為止做了什么。

要在xpath查詢中使用您的注冊前綴,請在其前面添加標記名:

/svg:svg/svg:g[1]

應該為您提供該SVG-Namespace中的第一個<g>元素。 如果仍需要進一步解釋/澄清,請告訴我。

請參閱在線演示

這也是上一個問題的原因:

我想要獲得你不喜歡的g標簽;你需要命名空間你可以試試這個:

$result = $svg->xpath('svg/g');
foreach ($result as $gtag) {
    echo $gtag . "\n";
}

雖然我無法測試它:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM