2017-02-09 44 views
0

我試圖在SVG文檔的文本標籤中添加一個背襯框。這個過程工作正常,除了svg.createElement步驟也在我的XML文件中創建一個條目像這樣xmlns=""如何停止在svg createElement步驟中創建xmlns屬性步驟

此條目似乎導致我的SVG文件(XML)無法正確顯示在我的JSVG畫布上。如果我手動編輯文件並刪除此條目,則XML將正確顯示。

我的代碼片段如下所示。

if(domElement instanceof SVGOMTextElement) { 
      SVGOMTextElement text = (SVGOMTextElement) domElement; 
      NodeList tspans = text.getElementsByTagName("tspan"); 
      for(int i = 0; i < tspans.getLength(); i++){ 
      Node node = tspans.item(i); 
      SVGOMTSpanElement tspan = (SVGOMTSpanElement) node; 
      Element backBox = svg.createElementNS(null,"rect"); 
      backBox.setAttributeNS(null,"id", "backingRect-attx" + String.valueOf(Math.round(tspan.getExtentOfChar(0).getX())) + "atty" + String.valueOf(Math.round(tspan.getExtentOfChar(0).getY()))); 
      backBox.setAttributeNS(null,"width", String.valueOf(tspan.getComputedTextLength())); 
      backBox.setAttributeNS(null,"height", String.valueOf(tspan.getExtentOfChar(0).getHeight())); 
      backBox.setAttributeNS(null,"style", "fill:green;fill-opacity:0.5"); 
      backBox.setIdAttributeNS(null,"id", Boolean.TRUE); 

      text.getParentNode().insertBefore(backBox, text); 
    } 

,該代碼生成如下所示的XML標記,

<rect xmlns="" width="59.89038" style="fill:yellow;fill-opacity:0.5" 
id="backingRect-attx407atty427" height="16.734436"/> 

所以,問題是我怎麼能阻止被添加到我的SVG XML輸出文件的這個屬性(xmlns="")?

我試圖通過代碼來調試,但我不能看行之後創建的屬性「的xmlns」,

元背箱= svg.createElementNS(NULL,「矩形」);

我試圖執行removeAttribute步驟,但這沒有奏效(因爲我找不到xmlns屬性)。

我使用Apache蠟染版本1.8

任何幫助將非常感激。

回答

3

xmlns =「」命名空間聲明是由於您選擇將您的元素置於空名稱空間而生成的。

Element backBox = svg.createElementNS(null,"rect"); 

如果你在SVG命名空間中創建你的元素,一切都會好的。

+0

嗨邁克爾 - 你的答案奏效。我按照您的建議更改了該行, Element backBox = svg.createElementNS(「http://www.w3.org/2000/svg」,「rect」); 並且該屬性從我的輸出中消失了,不僅如此,而且我使用的JSVGCanvas原始問題還沒有使用更新後的Dom進行刷新,現在正在運行。所以我很開心。 非常感謝您的幫助。我一直在爲此掙扎好幾天。 – robbie70