Java没有从SVG带回任何价值

时间:2015-01-05 16:26:33

标签: java xpath svg

使用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(读取和更改属性)吗?

提前感谢任何提示

1 个答案:

答案 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

或者,更好的是,注册或声明此命名空间并在路径表达式中为元素名称添加前缀。