2016-05-30 41 views
0

こんにちは私はドキュメントにSVGファイルをインポートするためのプログラムを作っています。 (LXML)SVG(Python)xPath属性で要素を取得

if so.funktion != "0": 
     if so.funktion=="1": 
      searchStr = '//svg:g[@svg-creator="popup1"]' 
      selectStr = template.xpath(searchStr, namespaces=inkex.NSS) 
      if selectStr != []: 
       selectStr[0].set("id","Popup "+so.name) 
       self.current_layer.append(selectStr[0]) 
      else: 
       None 

マイSVGファイル:

<g 
id="p1" 
svg-creator="popup1" 
transform="translate(140,-160)"> 
<rect 
    y="900" 
    x="0" 
    height="180" 
    width="200" 
    id="rect6309" 
    style="opacity:1;fill:#000000;fill-opacity:0.7372549;stroke:none;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> 
<g 
    id="b1234" 
    svg-creator="button1"> 
    <rect 
    style="opacity:1;fill:#6c6c6c;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 
    id="rect6588" 
    width="126" 
    height="34" 
    x="59" 
    y="1023" /> 
    <text 
    sodipodi:linespacing="125%" 
    id="text6770" 
    y="1045.8575" 
    x="91.91333" 
    style="font-style:normal;font-weight:normal;font-size:50px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" 
    xml:space="preserve"><tspan 
     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;font-family:'Franklin Gothic Medium';-inkscape-font-specification:'Franklin Gothic Medium, ';fill:#ffffff;fill-opacity:1" 
     y="1045.8575" 
     x="91.91333" 
     id="tspan6772" 
     sodipodi:role="line">button1</tspan></text> 
</g> 
<g 
    id="b83217" 
    transform="translate(0,-50)" 
    svg-creator="button2"> 
    <rect 
    style="opacity:1;fill:#6c6c6c;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" 
    id="rect6588-2" 
    width="126" 
    height="34" 
    x="59" 
    y="1023" /> 
    <text 
    sodipodi:linespacing="125%" 
    id="text6770-7" 
    y="1045.8575" 
    x="91.91333" 
    style="font-style:normal;font-weight:normal;font-size:50px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" 
    xml:space="preserve"><tspan 
     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;font-family:'Franklin Gothic Medium';-inkscape-font-specification:'Franklin Gothic Medium, ';fill:#ffffff;fill-opacity:1" 
     y="1045.8575" 
     x="91.91333" 
     id="tspan6772-6" 
     sodipodi:role="line">button2</tspan></text> 
</g> 
<text 
    xml:space="preserve" 
    style="font-style:normal;font-weight:normal;font-size:50px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" 
    x="75.460815" 
    y="941.51672" 
    id="text421312" 
    sodipodi:linespacing="125%" 
    svg-creator="title"><tspan 
    sodipodi:role="line" 
    id="tspan8274" 
    x="75.460815" 
    y="941.51672" 
    style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.5px;font-family:'Franklin Gothic Medium';-inkscape-font-specification:'Franklin Gothic Medium, ';fill:#ffffff;fill-opacity:1">Title</tspan></text> 

私は変更して、私のSVGの属性を設定することができます。これまでのところグラムを、私は別のSVGを操作/アクセスする必要があります。そのselectStrの中にg!

xpathのbutton1とbutton2にアクセスして操作するにはどうすればよいですか? selectStrから (私の実際のXPathはpopup1が含まれているので、私は、同じ属性を持つ複数のポップアップを持っている)

+0

現在のXPathから返された要素オブジェクトに別のXPathを適用します。より具体的な情報、つまり現在選択されている要素と実際のターゲット要素を含むサンプルXMLを提供しない限り、具体的な説明は提供できません。ありがとう – har07

+0

確かにコードをheres: –

+0

あなたは何を変えようとしていますか? –

答えて

0

あなたは、たとえば、子要素を見つけることができるシンプルなXPathを使用することができ、「ボタン1」:

btn1 = selectStr.find('svg:g[@svg-creator="button1"]', inkex.NSS) 

またはxpath()を使用してメソッド:

btn1 = selectStr.xpath('svg:g[@svg-creator="button1"]', namespaces=inkex.NSS)[0] 
関連する問題