0

我在字符串中有一些 XML,并且想用“”替换所有 id 属性值,其中 id 属性值以“widget”开头。

这是我的输入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

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

相反,您也可以使用 XML 处理。从下载 JDOMwww.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 回答
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 回答