【发布时间】:2017-05-06 22:48:15
【问题描述】:
例如,我试图从 svg 中读取样式块,我可以获取类型但不能获取字符串。
$svgTemplate = new SimpleXMLElement($_POST['SvgTemplateImport']);
$svgTemplate->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');
$svgTemplate->registerXPathNamespace('xlink', 'http://www.w3.org/1999/xlink');
//I tried a bunch of things and this how far I got
$test[] = $svgTemplate->xpath('/svg:svg/svg:style');
$test[] = $result[0][0]['type'];
var_dump($test);
如何检索样式字符串?
如何设置样式字符串?
如何复制组并更改其属性? (比如翻译 x 和 y)?
除其他外,我还想更改 svg 的分辨率和视图框,但我将能够从答案中找出这些。
谢谢。
编辑1: 查看我的 svg:我评论了我想要实现的目标。
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="460px" height="200px" viewBox="0 0 460 200" style="enable-background:new 0 0 460 200;" xml:space="preserve">
<style type="text/css">/* new style */</style>
<!-- I did cut the unrelevant parts out-->
<symbol id="MoonFull" viewBox="0 0 100 100">
<path style="fill:#FFFFFF;" d="M50,99.33C22.8,99.33,0.67,77.2,0.67,50S22.8,0.67,50,0.67S99.33,22.8,99.33,50S77.2,99.33,50,99.33 z"/>
<path style="fill:#231F20;" d="M50,1.35c26.83,0,48.65,21.82,48.65,48.65S76.83,98.65,50,98.65S1.35,76.83,1.35,50 S23.17,1.35,50,1.35 M50,0C22.39,0,0,22.39,0,50s22.39,50,50,50s50-22.39,50-50S77.61,0,50,0L50,0z"/>
</symbol>
<symbol id="Star" viewBox="0 0 100 100">
<path id="Star" style="fill:#00FF00;" d="M50,3.58L62.5,39H100L70.83,60.95l10.42,34.93L50,74.81L18.75,95.53l10.42-34.51L0,39 h37.5L50,3.58z"/>
</symbol>
<g id="TemplateForm">
<g id="twd">
<rect id="twdCanvas" x="7.3" y="9.32" class="st0" width="263.03" height="72"/>
<text id="twdWeekdayshorttext" transform="matrix(1 0 0 1 249.5817 41.9174)"><tspan x="0" y="0" class="st2 st3">C</tspan><tspan x="-1.2" y="29.13" class="st2 st3">S</tspan></text>
<text id="twdDatenumber" transform="matrix(1 0 0 1 41.5544 69.5698)" class="st5 st6">26</text>
<line id="twdDivider" class="st7" x1="126.49" y1="9.32" x2="126.49" y2="81.32"/>
<g id="twdText">
<text id="twdTextLine3" transform="matrix(1 0 0 1 135.0475 28.1718)" class="st2 st8">1234567890abcdef12345</text>
<text id="twdTextLine2" transform="matrix(1 0 0 1 135.0475 41.5319)" class="st2 st8">1234567890abcdef12345</text>
<text id="twdTextLine1" transform="matrix(1 0 0 1 135.0475 54.892)" class="st2 st8">1234567890abcdef12345</text>
<text id="twdTextLine0" transform="matrix(1 0 0 1 135.0475 68.252)" class="st2 st8">1234567890abcdef12345</text>
</g>
<line id="twdDateNumAliignerLeft" class="st0" x1="120.02" y1="17.39" x2="120.02" y2="72.07"/>
<rect id="twdBoxStar" x="15.68" y="19.75" class="st0" width="21" height="21"/>
<rect id="twdBoxText" x="132.49" y="17.39" class="st0" width="107.92" height="54.68"/>
<rect id="twdBoxMoon" x="15.68" y="49.15" class="st0" width="21" height="21"/>
</g>
<g id="tcl">
<rect id="tclCanvas" x="7.3" y="153.31" class="st0" width="263.03" height="36"/>
<line id="tclDivider" class="st7" x1="126.49" y1="153.31" x2="126.49" y2="189.31"/>
<text id="tclYear" transform="matrix(1 0 0 1 59.1393 183.5269)" class="st2 st9">YYYY</text>
<text id="tclMonthname" transform="matrix(1 0 0 1 130.9372 182.7798)" class="st2 st10">monthname</text>
</g>
</g>
<g id="result"><!-- this group will be generated -->
<!-- this is made from: #twd and added transformation-->
<g id="result1" transform="matrix(1 0 0 1 249.5817 41.9174)">
<rect id="twdCanvas" x="7.3" y="9.32" class="st0" width="263.03" height="72"/>
<!-- all the texts will be canged -->
<text id="twdWeekdayshorttext" transform="matrix(1 0 0 1 249.5817 41.9174)"><tspan x="0" y="0" class="st2 st3">C</tspan><tspan x="-1.2" y="29.13" class="st2 st3">S</tspan></text>
<text id="twdDatenumber" transform="matrix(1 0 0 1 41.5544 69.5698)" class="st5 st6">26</text>
<line id="twdDivider" class="st7" x1="126.49" y1="9.32" x2="126.49" y2="81.32"/>
<g id="twdText">
<text id="twdTextLine3" transform="matrix(1 0 0 1 135.0475 28.1718)" class="st2 st8">changed this</text>
<text id="twdTextLine2" transform="matrix(1 0 0 1 135.0475 41.5319)" class="st2 st8">changed this</text>
<text id="twdTextLine1" transform="matrix(1 0 0 1 135.0475 54.892)" class="st2 st8">changed this</text>
<text id="twdTextLine0" transform="matrix(1 0 0 1 135.0475 68.252)" class="st2 st8">changed this</text>
</g>
<line id="twdDateNumAliignerLeft" class="st0" x1="120.02" y1="17.39" x2="120.02" y2="72.07"/>
<rect id="twdBoxText" x="132.49" y="17.39" class="st0" width="107.92" height="54.68"/>
<!-- this: <rect id="twdBoxStar" x="15.68" y="19.75" class="st0" width="21" height="21"/> to: -->
<use x="132.49" y="17.39" width="21" height="21" xlink:href="#Star" /><!-- how can I chnage the fill color? -->
<!-- this: <rect id="twdBoxMoon" x="15.68" y="49.15" class="st0" width="21" height="21"/> to: -->
<use x="15.68" y="49.15" width="21" height="21" xlink:href="#MoonFull" />
</g>
<!-- and so on... the end I have to adjust the viewbox and resolution-->
</g>
</svg>
【问题讨论】:
-
“如何复制一个组并更改其属性?” - 你的意思是一组元素吗?
-
一个 svg 组:
... ,并使其... 我猜同样的方法适用于所有标签,这就是我问这个例子的原因。抱歉不能编辑 cmets:(