如何将部分XML复制到新的XML文件?

时间:2012-11-15 15:27:48

标签: java xml

有人知道如何只将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 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

除非您在某处使用CDATA

答案 2 :(得分:0)

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

<强> 1。 XSLT:

在这里,您可以为每个

消除节点<g>

<强> 2。 FileInputStream:

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

答案 3 :(得分: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);

这样做可以避免正则表达式的脆弱性(这将适用于这种特定情况,但是如果你需要开始变得更加漂亮,那么它们将很快失控),并减少你的假设必须考虑输入格式化的方式。