0

文字列に XML があり、id 属性値が「widget」で始まるすべての id 属性値を「」に置き換えたいと考えています。

ここに私の入力xmlがあります:

<panel height="24" id="sd1" layout="vertical" left_padding="12" spacing="12" stereotype="directions" width="790" x="0" y="79">
<text_widget halign="left" id="widget5019721000" width="761"/>
<text_widget halign="left" id="widget5019501000" width="761"/>
<text_widget halign="left" id="widget5019711000" width="761"/>
<text_widget halign="left" id="widget5019752000" width="761"/>
</panel>

出力 xml は次のようになります。

<panel height="24" id="sd1" layout="vertical" left_padding="12" spacing="12" stereotype="directions" width="790" x="0" y="79">
<text_widget halign="left" id="" width="761"/>
<text_widget halign="left" id="" width="761"/>
<text_widget halign="left" id="" width="761"/>
<text_widget halign="left" id="" width="761"/>
</panel>

私は以下のコードを使用しようとしていました:

String xmlStr = this.getXmlString();
Pattern pattern = Pattern.compile(xmlStr);
Matcher matcher = pattern.matcher(\"id="widget[0-9]\");

Javaで正規表現を使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

0

ただし、コードにエラーがありPattern.compileます。ソース文字列ではなく、正規表現パターンである文字列パラメーターを受け取ります。これが正しいコードです。

Pattern pattern = Pattern.compile("id=\\\"widget\d*")
Matcher match = pattern.matcher(xmlStr)
String result = match.replaceAll("id=\\\"")
于 2013-01-10T19:46:32.437 に答える
0

String result = xml.replaceAll("id=\\\"widget[0-9]*", "id=\"");

代わりに、XML 処理を使用することもできます。から JDOM をダウンロードしwww.jdom.org、含まれている jdom-2.0.4.jar をクラスパスに追加します。次に、次のコードを使用します。

import java.io.StringReader;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class Test {
public static void main(String[] args) throws Exception {
    String xml = "<panel height=\"24\" id=\"sd1\" layout=\"vertical\" left_padding=\"12\" spacing=\"12\" stereotype=\"directions\" width=\"790\" x=\"0\" y=\"79\">"
                +"<text_widget halign=\"left\" id=\"widget5019721000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019501000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019711000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019752000\" width=\"761\"/>"
                +"</panel>";

    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(new StringReader(xml));

    List<Element> textWidgetElements = doc.getRootElement().getChildren("text_widget");
    for (Element e : textWidgetElements) {
        if (e.getAttributeValue("id").startsWith("widget")) {
            e.setAttribute("id", "");
        }
    }

    XMLOutputter out = new XMLOutputter();
    out.setFormat(Format.getPrettyFormat());
    String result = out.outputString(doc);

    System.out.println(result);
}

}

于 2013-01-10T20:11:21.490 に答える