使用Dom4J从XML文件中获取属性值通常没有问题
同样在XML Tools中我可以使用xsl和Xpath从该SVG获取“use fill”的值
<svg xmlns="http://www.w3.org/2000/svg" width="2250" height="2700" viewBox="0 0 1800 2160" color-interpolation-filters="sRGB" fill="none" overflow="visible" fill-rule="evenodd" stroke-linecap="square" stroke-miterlimit="3" xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="translate(363.17-1988.15)">
<use fill="#f00" xlink:href="#1"/>
<g transform="translate(72.59-8.504)">
<use xlink:href="#9"/>
<use xlink:href="#B"/>
<use xlink:href="#A"/>
</g>
<text x="25.29" y="2143.97" fill="#000" font-family="Arial" font-size="8">SetAnnotations</text>
</g>
e.g。适用于xmlSpy
/ svg / g / use / @ fill或// g [text =“SetAnnotations”] / use / @ fill
那(以及我尝试过的所有其他内容)在Java中失败(通常可以正常工作)
public static String getNodeValue(Element doc, String xpath){
try{
return doc.selectSingleNode(xpath).getText();
}catch (Exception ex){
log.debug("getNodeValue failed with " + ex.getMessage());
return null;
}
}
或
public static String getAttributeValue(Element doc, String xpath, String attributeName){
try{
Node node = doc.selectSingleNode(xpath);
String value = node.valueOf(attributeName);
return value;
}catch (Exception ex){
log.debug("getAttributeValue failed with " + ex.getMessage());
return null;
}
}
由于某些原因我可以使用1.5 + dom4J,但由于svg非常老,我希望找到一个没有额外库作为蜡染的解决方案
知道如何在Java中正确使用svg(读取和更改属性)吗?
提前感谢任何提示
答案 0 :(得分:0)
我认为you've been told already that SVG documents might have a default namespace。
但是,无论如何我写作:你的SVG文档有一个默认命名空间,你需要考虑。以下XPath表达式将起作用:
/*[local-name()= 'svg']/*[local-name() = 'g']/*[local-name() = 'use']/@fill
和
//*[local-name() = 'g'][*[local-name() = 'text']="SetAnnotations"]/*[local-name() = 'use']/@fill
或者,更好的是,注册或声明此命名空间并在路径表达式中为元素名称添加前缀。