以下字符串
"<service id="any value"></service>"
我想在java中使用regex将其替换为以下内容
<service></service>
如果字符串
中有多个服务标签,我写了以下内容但不起作用string.replaceAll("^<service.*</service>$", "<service></service>");
示例:
<request>
<service id="anyvalue"></service>
<service id="anyvalue"></service>
</request>
答案 0 :(得分:3)
您可以在开头和结尾^
中使用不带$
和<service.*</service>
的正则结构,因此如果您使用:
string.replaceAll("<service.*</service>", "<service></service>")
结果:
<request>
<service></service>
<service></service>
</request>
答案 1 :(得分:0)
答案 2 :(得分:0)
使用正则表达式来修改你的xml总是一个问题,让我们假设你的正则表达式<service.*</service>
目前适用于你的xml。
稍后您要更新xml以包含名为name
的新属性:
<request>
<service id="anyvalue" name="myservice"></service>
<service id="anyvalue" name="myservice"></service>
</request>
并且您只想删除id
属性。
你认为正则表达式会怎样?它也将删除name
。
我总是使用xml解析器来修改xml。
以下代码可以执行此操作:
try
{
String input = "<request><service id=\"anyvalue\"></service><service id=\"anyvalue\"></service></request>";
InputSource inputSource = new InputSource( new StringReader( input ) );
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse( inputSource );
NodeList nodes = doc.getElementsByTagName("service");
for ( int i = 0; i < nodes.getLength(); i++ )
{
Node node = nodes.item(i);
if ( node.getNodeType() == Node.ELEMENT_NODE )
{
Element element = (Element)node;
element.removeAttribute("id");
}
}
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty( OutputKeys.METHOD, "xml" );
transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "true" );
DOMSource xmlSrc = new DOMSource( doc.getDocumentElement() );
StringWriter sw = new StringWriter();
transformer.transform( xmlSrc, new StreamResult( sw ));
System.out.println( "Modified xml is : " + sw.toString() );
}
catch ( Exception e )
{
e.printStackTrace();
}