2

有人知道如何将 XML 文件的一部分复制到新的 XML 文件中吗?我有这个:

<?xml version="1.0"?><!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 500 401" height="401px" style="stroke: #818181;stroke-width: 1;stroke-linecap: round;stroke-opacity: 0.25;fill: #f4f3f0;" contentStyleType="text/css" zoomAndPan="magnify" preserveAspectRatio="xMidYMid meet" width="500px" enable_background="new 0 0 500 401" contentScriptType="application/ecmascript" version="1.1"><defs></defs><metadata><views><view w="500" zoomAndPan="magnify" preserveAspectRatio="xMidYMid meet" padding="0" h="401"><proj id="laea" lon0="16.693" lat0="45.723"></proj><bbox w="51.2" y="989.82" h="50.8" x="972.4"></bbox><llbbox lon1="180" lon0="-180" lat0="-90" lat1="90"></llbbox></view></views></metadata>
<g>
<path data-name="" d=" " data-fips=""></path>
<path data-name="" d="" data-fips=""></path>
</g>
</svg>

我想复制除 g 标签中的数据以外的所有内容,我该怎么做?有人可以给我看代码吗?

4

4 回答 4

0

您可能正在寻找 XSLT。它是一个 java 技术/库,允许您定义一个 xml 结构到另一个的转换。它允许可重复的批处理操作和强大的动态语言,可以设置变量、使用条件语言等。您可以从命令行或从另一个应用程序内部运行它。

http://en.wikipedia.org/wiki/XSLT

于 2012-11-15T15:39:30.673 回答
0

在您的情况下,一个简单的正则表达式替换就足够了:

final String svmXML = "<?xml....."; // your XML here
final String svmXMlWithoutG = svmXML.replaceAll ("\\<g\\>(?s).*\\</g\\>", ""));

除非您在某处使用CDATA 。

于 2012-11-15T15:43:57.200 回答
0

您可以通过两种方式实现这一目标。

1. XSLT:

<g>在这里,您可以通过 for-each消除节点

2. 文件输入流:

逐行读取文件并在检查行包含字符串之前写入新文件<g>并跳过它。

于 2012-11-15T18:08:26.943 回答
0

虽然您可以使用 XSLT 来做到这一点,但下面是仅使用标准 Java API(使用 DOM)的方式。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(/* get an InputStream of your data */);
Element root = document.getDocumentElement();
NodeList children = root.getElementsByTagName("g");
for (int i = 0; i < children.getLength(); ++i) {
    Node child = children.item(i);
    root.removeChild(child);
}
Transformer tr = TransformerFactory.newInstance().newTransformer();
StreamResult result = new StreamResult(/* Get an OutputStream to write to */);
DOMSource source = new DOMSource(document);
tr.transform(source, result);

这样做可以避免正则表达式的脆弱性(这将适用于这种特定情况,但如果您需要开始变得更花哨,它们会很快与 XML 失控),并减少您必须做出的假设关于您的输入格式的方式。

于 2012-11-15T19:02:18.123 回答