2016-09-30 5 views
2

Мы генерируем SVG документа она выглядит хорошо, но когда мы пытаемся работать с ним:org.apache.batik.bridge.BridgeException: нуль: -1 Атрибут «XLink: HREF» элемента <use> требуется

UserAgent userAgent = new UserAgentAdapter(); 
BridgeContext ctx = new BridgeContext(userAgent); 
ctx.setDynamicState(BridgeContext.DYNAMIC); 
GVTBuilder builder = new GVTBuilder(); 
builder.build(ctx, svgDocument); 

ER: Вызванный: org.apache.batik.bridge.BridgeException: нуль: -1

The attribute "xlink:href" of the element <use> is required 
at org.apache.batik.bridge.SVGUseElementBridge.buildCompositeGraphicsNode(SVGUseElementBridge.java:120) [%HOME%/lib/batik-all_new.jar:1.8pre+r1435044] 
at org.apache.batik.bridge.SVGUseElementBridge.createGraphicsNode(SVGUseElementBridge.java:98) [%HOME%/lib/batik-all_new.jar:1.8pre+r1435044] 
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213) [%HOME%/lib/batik-all_new.jar:1.8pre+r1435044] 
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171) [%HOME%/lib/batik-all_new.jar:1.8pre+r1435044] 
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219) [%HOME%/lib/batik-all_new.jar:1.8pre+r1435044] 
... 
... 

НО если мы заново svgDocument из строки или файла:

например

SVGDocument svg = factory.createSVGDocument("svg", new ByteArrayInputStream(svgString.getBytes())); 

или

SVGDocument svg = factory.createSVGDocument("svg", new FileInputStream(new File("C:\\file.xml"))); 

Там нет никакой ошибки. Не могли бы вы помочь?

Спасибо.

P.S. использование элемента существует, но у нас есть некоторые странные ошибки во время выполнения

SVGUseElement svg = (SVGUseElement)svgElement.getOwnerDocument() 
    .createElementNS("http://www.w3.org/2000/svg", "use"); 
svg.setAttribute("xlink:href", "#" + deviceObjectParameters.pictureURL.hashCode()); 
<use xlink:actuate="onLoad" xlink:type="simple" xlink:show="embed" transform="translate(0.0, 0.0) rotate(0, 0, 0) scale(1.0, 1.0)" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#1232024040"/> 

ответ

1

Вы не можете использовать SetAttribute установить атрибут в XLink пространства имен, то это будет только создавать атрибуты в нуле пространства имен. Вместо этого вам нужно установить атрибут AttributeNS для атрибутов xlink: href.

svg.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#" + deviceObjectParameters.pictureURL.hashCode()); 
+0

Я сделал это. Но новый err: null: -1 Не удалось найти указанный элемент: «# 1232024040» , указанный в элементе - может быть проблемой «id» –

+0

Возможно, использование hashCode кажется неправильным, вам нужен идентификатор другого элемента. –

 Смежные вопросы

  • Нет связанных вопросов^_^