如何根据java中的另一个元素更改XML元素的值?
问题描述:
目前我工作的XML修改任务在我的项目,我想改变从下面的源代码,XML元素是我的XML:如何根据java中的另一个元素更改XML元素的值?
<Client_list>
<Description>
<ip>192.168.11.206</ip>
<name>vishal suhagiya</name>
</Description>
<Description>
<ip>192.168.11.205</ip>
<name>kinnari jasoliya</name>
</Description>
</Client_list>
我用Java写的一样:
for (int i = 0; i < nodes.getLength(); i++) {
Element Description = (Element)nodes.item(i);
Node element = nodes.item(i);
Element ip = (Element)Description.getElementsByTagName("ip_address").item(0);
String pName = ip.getTextContent();
String Client = jTextField4.getText();
if (pName.equals(Client)) {
if("Name".equals(element.getNodeName()))
{
element.setTextContent(jTextField4.getText());
}
}
我需要如果我想改变192.168.11.205的名字,那我该怎么改? 那么如何根据IP地址更改XML中的名称
答
我使用xpath来管理这种更新。
XPath xpath = XPathFactory.newInstance().newXPath();
try {
NodeList nodes = (NodeList) xpath.evaluate("//Description[ip='192.168.11.205']/name", doc, XPathConstants.NODESET);
for(int i=0;i<nodes.getLength();i++){
Element nameElement = (Element) nodes.item(i);
nameElement.setTextContent("NewValue");
}
} catch (XPathExpressionException e) {
// Some error management here
}
如果您需要管理XML文档作为Java对象,你可能想看看一个JAXB tutorial。
答
在XSLT中完成整个事情。
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="ip"/>
<xsl:param name="newName"/>
<xsl:template match="*">
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:template>
<xsl:template match="name[../ip=$ip]">
<name><xsl:value-of select="$newName"/></name>
</xsl:template>
</xsl:transform>
三江源@minus但它没有工作 –
陌生,其实我做了测试(与你把你的问题的XML片段),它为我工作。 xml源使用命名空间?如果是这样的话,XPath可能会更难写。 – minus