从XML中提取SVG.选择哪种Java XML API



我需要执行以下操作:将包含SVG(可伸缩矢量图形)作为某些元素的XML文档进行分析。SVG本身就是XML。但我需要从整体上提取SVG部分,而不需要解析SVG字符串的内容。

示例:

 ...
 <symbol>
   <svg> [arbitrary svg/xml content here ...] </svg>
 </symbol>
 ...

我想解析文档并提取符号标记之间的字符串。

我对Java XML API不是很熟悉。你会为这项任务推荐哪一个?DOM、SAX、StAX?有些食谱会被取消。我理解每一个之间的差异,无需解释基本原理。但是似乎没有一个是完美的任务,因为我需要获得XML字符串。

正如@Georgy所说,决定使用DOM、SAX还是StAX取决于您的XML大小。大多数情况下,使用DOM解析器会非常简单,也适用于大多数中小型XML文档。假设您的文档结构为:

<?xml version="1.0" encoding="UTF-8"?>
<rootElement>
    <someElement>
        <symbol>
            <svg>[arbitrary svg/xml content here ...]</svg>
        </symbol>
    </someElement>
</rootElement>

然后可以使用DOM和XPath API查询文档,如下所示:

//    Parsing XML document
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setIgnoringElementContentWhitespace(true);
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
byte[] xmlDATA = yourXMLAsString.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(xmlDATA);
Document doc = dBuilder.parse(in);
//    Accessing SVG element using XPath
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
String xpathQuery = "/rootElement/someElement/symbol/svg";
XPathExpression expr = xpath.compile(xpathQuery);
Node svgNode = (Node) expr.evaluate(doc, XPathConstants.NODE);

如果你想以纯文本的形式访问svg内容,你可以使用检索节点的getTextContent()方法:

String svgContent = svgNode.getTextContent();

最新更新