gpt4 book ai didi

Java - 根据节点的属性编辑节点元素

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:24 24 4
gpt4 key购买 nike

我有这个 XML 文件:

<Credentials>
<WebsiteApplication id="test">
<Username>ADMIN</Username>
<Password>ADMIN</Password>
</WebsiteApplication>
</Credentials>
<Credentials>
<WebsiteApplication id="test2">
<Username>ADMIN2</Username>
<Password>ADMIN2</Password>
</WebsiteApplication>
</Credentials>

只有当“WebsiteApplication”节点的 id 与输入的 ID 相同时,我才想编辑“WebsiteApplication”节点的用户名(或密码)。

我尝试了一些东西,但它不起作用......

 System.out.println("Insert the id:....");
BufferedReader websiteIn = new BufferedReader(new InputStreamReader(System.in));
String Editid = websiteIn.readLine().toString();


Document doc = SecondaryFuncts.FindXML();

Element root = doc.getDocumentElement();
NodeList rootlist = root.getChildNodes();
for(int i=0; i<rootlist.getLength(); i++)
{


//THERE IS NO PROBLEM UNTILL NOW...
//And now i trying to take the id and check if matches
//with my input and them change nodes elements...

Element Applications = (Element)rootlist.item(i);
NamedNodeMap id = Applications.getAttributes();
for(int ids = 0 ; ids <id.getLength(); ids++)
{


I tried a lot in this loop but nothing worked.. what can i do here?
Lets assume that i want username and password to change both as "test"

}

最佳答案

使用 XPath 来完成此类任务。您将直接选择正确的 WebsiteApplication 元素,然后可以修改其 UsernamePassword 子元素。

使用以下 XPath /Credentials/WebsiteApplication[@id="XXX"] 选择正确的元素,其中 XXX 是用户提供的输入。

然后只需检索该元素的子元素并更改用户名/密码内容。

String inputId = "test1";
String xpathStr = "//Credentials/WebsiteApplication[@id='" + inputId + "']";
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile(xpathStr);
Node node = (Node)expr.evaluate(doc, XPathConstants.NODE);
// node is the correct <WebsiteApplication> element
// do what you have to do with its children using node.getChildNodes()

// or you can even access directly the two elements
expr = xpath.compile(xpathStr + "/Username");
Node username = (Node)expr.evaluate(doc, XPathConstants.NODE);
// and set their values using the setTextContent() method
username.setTextContent("test-username");

expr = xpath.compile(xpathStr + "/Password");
Node password = (Node)expr.evaluate(doc, XPathConstants.NODE);
password.setTextContent("test-password");

查看完整示例:

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class SO12477695 {
public static void main(String[] args) throws Exception {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader("<root>\r\n" + //
"<Credentials>\r\n" + //
" <WebsiteApplication id=\"test\">\r\n" + //
" <Username>ADMIN</Username>\r\n" + //
" <Password>ADMIN</Password>\r\n" + //
" </WebsiteApplication>\r\n" + //
"</Credentials>\r\n" + //
"<Credentials>\r\n" + //
" <WebsiteApplication id=\"test2\">\r\n" + //
" <Username>ADMIN2</Username>\r\n" + //
" <Password>ADMIN2</Password>\r\n" + //
" </WebsiteApplication>\r\n" + //
"</Credentials>\r\n" + //
"</root>")));
String inputId = "test2";
String xpathStr = "//Credentials/WebsiteApplication[@id='" + inputId + "']";
// retrieve elements and change their content
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile(xpathStr + "/Username");
Node username = (Node) expr.evaluate(doc, XPathConstants.NODE);
username.setTextContent("test-username");
expr = xpath.compile(xpathStr + "/Password");
Node password = (Node) expr.evaluate(doc, XPathConstants.NODE);
password.setTextContent("test-password");
// output the document
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
System.out.println(writer.toString());

// the document is now saved, you may want to save it in a file.
}
}

输出如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<Credentials>
<WebsiteApplication id="test">
<Username>ADMIN</Username>
<Password>ADMIN</Password>
</WebsiteApplication>
</Credentials>
<Credentials>
<WebsiteApplication id="test2">
<Username>test-username</Username>
<Password>test-password</Password>
</WebsiteApplication>
</Credentials>
</root>

关于Java - 根据节点的属性编辑节点元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12477695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com