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 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 に答える
0

これは 2 つの方法で実現できます。

1. XSLT :

<g>ここで、for-each を介してノードを削除できます

2.ファイル入力ストリーム:

行ごとにファイルを読み取り、チェック行に文字列が含まれる前に新しいファイルに書き込み、<g>それをスキップします。

于 2012-11-15T18:08:26.943 に答える
0

あなたはおそらく XSLT を探しているでしょう。これは、ある xml 構造から別の xml 構造への変換を定義できる Java テクノロジ/ライブラリです。変数を設定したり、条件付き言語を使用したりできる、反復可能なバッチ操作と強力な動的言語が可能です。コマンドラインから、または別のアプリケーション内から実行できます。

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 に答える