0

タグ内のタグ<clip path>を指すタグが与えられたため、(360 ファイル) SVG のバッチを再作成しようとしています。また、fill 属性を持つ要素も作成しました。タグとタグを削除しようとしていますが、タグを保持してポリゴンの塗りつぶし属性を指定します。<rect><defs><polygon><clipPath><defs><polygon><rect>

これを正規表現で実行しようとしましたが、複雑すぎて、うまく実行できるようには見えませんでした。

xml パーサー クラスを使用して Java で実行しようとしましたが、属性にアクセスする方法がわかりませんでした (メソッドを使用してみ.getAttributes()ましたが、要素の属性を取得しませんでした)。

これが私のサンプルコードの一部です:

<defs>
    <rect id="SVGID_1_" y="0" width="1023.88" height="100.08"/>
</defs>
<clipPath id="SVGID_2_">
    <use xlink:href="#SVGID_1_"  display="none" overflow="visible"/>
</clipPath>
<polygon clip-path="url(#SVGID_2_)" fill="#E81E25" points="-0.12,0 -0.12,100.08 1023.88,100.08 1023.88,0"/>

これはあるべきものです:

<rect fill="#E81E25" width="1023.88" height="100.08"/>

360 ファイルをバッチ変換して、上記のように<rect>タグを付けてフォーマットするにはどうすればよいですか?

4

2 に答える 2

0

プリアンブル: あなたのファイルは他のプログラムによって生成されているので、すべてのタグが同じように見えるリスクはほとんどないと想定できます。ファイルが異なるソース (またはそのプログラムの異なるバージョン) からのものである場合、私の提案は機能しないか、少なくともより複雑です!

私がすることは、(各)ファイルを解析し、データを分割して再構築することです。これは単なるヒントであり、言語固有のものを使用しないようにしています:

- それを呼び出しましょう - 使用できるプライマリ ID は次のとおりです: "id=SVGID_xxx_"

ファイルと正規表現を反復処理します。

<rect.*id="([^"]*).*width="([^"]*).*height="([^"]*)
           ^--R1            ^--R2          ^--R3

データを次のように保ちます(言語によって異なります)

rect_array[R1].width=R2     // or $rect_list[$R1]["w"]=R2; // php like
rect_array[R1].height=R3

その後、2回目の繰り返し

<polygon.*?\(([^)]*).*?fill=.([^'"]*)
           ^--R1 (id again)   ^--color     

それをハッシュ/配列/マップに追加します

rect_array[R1].fill=color     // or $rect_list[$R1]["f"]=color; // php like

最後のステップは、リスト/配列を反復処理して再構築することです

for_all_in(rect_array).do    // foreach($rect_array as $rd) 
puts/echo rect="<rect ...    //   echo "<rect width='rd[w]' ... 

HTH

于 2013-11-11T18:00:57.350 に答える