我的要求是将reloadable =“ true”更新为reloadable =“ false”。下面的代码做的很完美,但是没有更新注释部分中的属性。
我知道comment()函数可以,但是到目前为止还算不上运气,下面是通过代码
NodeList contextRoots = XMLUtil.xPathNodeList("//*[contains(@reloadable, 'true')]", ServerXML.getDocumentElement());
for(int id = 0; id < contextRoots.getLength(); id++)
{
Node value = contextRoots.item(id).getAttributes().getNamedItem("reloadable");
String val = value.getNodeValue();
value.setNodeValue(val.replaceAll("true", "false"));
}
return ServerXML;
下面是XML
<Context docBase="/UserManager" path="" reloadable="true"/>
<Context docBase="/UserManager" path="" reloadable="true"/>
<Context docBase="/AdminConsole" path="" reloadable="true"/>
<Context docBase="/AdminConsole" path="" reloadable="true"/>
<Context docBase="/public#cert" path="" reloadable="true"/>
<Context docBase="/public#cert" path="" reloadable="true"/>
<!-- Remove below comment block if CQI is installed-->
<!-- <Context docBase="CQI" path="" reloadable="true" />
<Context docBase="CQI" path="" reloadable="true" /> -->
最佳答案
您可以检测到节点是否为COMMENT_NODE
并查看其数据是否以<Context
开头,然后将reloadable=true
替换为reloadable=false
,如以下代码所示:
InputSource inputSource = new InputSource( new FileInputStream( new File("commentupdate.xml") ) );
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse( inputSource );
NodeList nodeList = doc.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++)
{
if ( nodeList.item(i).getNodeType() == Element.COMMENT_NODE )
{
Comment comment=(Comment) nodeList.item(i);
String data = comment.getData();
if ( data.trim().startsWith( "<Context") )
{
data = data.replaceAll("reloadable\\s*=\\s*\"true\"", "reloadable=\"false\"");
Comment newComment = doc.createComment(data);
comment.getParentNode().appendChild(newComment);
comment.getParentNode().removeChild(comment);
}
}
}
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty( OutputKeys.METHOD, "xml" );
transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "true" );
transformer.setOutputProperty( OutputKeys.INDENT, "yes");
StreamResult sr = new StreamResult( new File( "commentupdate.xml" ) );
transformer.transform( new DOMSource(doc), sr );