java解析XML修改特定项的值然后保存xml文件,求高手帮忙 急需 在线等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java解析XML修改特定项的值然后保存xml文件,求高手帮忙 急需 在线等相关的知识,希望对你有一定的参考价值。

例如以下hibernate.cfg.xml文件,我要更改hibernate.connection.url,hibernate.connection.username,hibernate.connection.password的值:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://192.168.1.52:1433;databaseName=Management</property>
<property name="hibernate.connection.username">parkdb</property>
<property name="hibernate.connection.password">123456789</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">50000</property>
<property name="hibernate.c3p0.max_statements">270</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">false</property>
<property name="hiberante.cache.use_second_level_cache">false</property>
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.jdbc.fetch_size">100</property>
<mapping resource="model/InoutPut.hbm.xml"/>
<mapping resource="model/Uid.hbm.xml"/>
<mapping resource="model/Permission.hbm.xml"/>
<mapping resource="model/Staff.hbm.xml"/>
<mapping resource="model/Card.hbm.xml"/>
<mapping resource="model/Dept.hbm.xml"/>
<mapping resource="model/Userright.hbm.xml"/>
<mapping resource="model/Kqms.hbm.xml"/>
<mapping resource="model/SxTime.hbm.xml"/>
<mapping resource="model/Leave.hbm.xml"/>
</session-factory>
</hibernate-configuration>
急需 求给代码谢谢

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public static void main(String[] args) throws Exception
SAXReader sax = new SAXReader();
//假设你的xml是放在D盘下的叫做a.xml的文件
File file = new File("D:\\a.xml");
Document doc = sax.read(new FileInputStream(file));
Element root = doc.getRootElement();
root = root.element("session-factory");
List<Element> els = root.elements();
for(Element e : els)
if(e.getName().equals("property"))
String attval = e.attribute("name").getText();
if(attval.equals("hibernate.connection.url"))
//要修改的url的新值
e.setText("newUrl");
else if(attval.equals("hibernate.connection.username"))
/ /要修改的username的新值
e.setText("newUsername");
else if(attval.equals("hibernate.connection.password"))
//要修改的password的新值
e.setText("newPassword");



//重新写入到文件
XMLWriter output = new XMLWriter(new FileWriter(file));
output.write(doc);
output.close();


纯手打的,应该还有更简单的方法,但是没有工具忘记函数了,给你写了一个我记得住的方式,这个应该是可以的,用的是dom4j,如果你没有可能需要导入一个dom4j.jar的jar包
参考技术A 可以直接在HibernateSessionFactory中设置
configuration.configure(configFile);
configuration.setProperty("hibernate.connection.url",“你的url”);
configuration.setProperty("hibernate.connection.username",“”);
configuration.setProperty("hibernate.connection.password",“”);
sessionFactory = configuration.buildSessionFactory();
参考技术B 为什么不手动修改,必须要写程序吗?追问

上面要求jdbc:sqlserver://192.168.1.52:1433;databaseName=Management
parkdb
123456789
可以修改url的IP地址和数据库 ,username,password。我想了办法他们说不行让我用xml,而我不太懂xml所以只能求助了 如果你有好的介意还请指教

追答

我很奇怪,“他们说不行让我用xml”这就话是什么意思,既然数据库的URL可以修改了,为什么用户名和密码不能直接在XML修改,使用XML配置hibernate的数据源就是为了解决硬编码问题,XML既然在你手里,就可以有你来修改了,要用程序的话就使用DOM4j这个开源库了,他的API很简单的,我觉得这样是不是有点费力不讨好啊

追问

我写的是javaswing项目 里面有一个配置面板 要求是配置好后以后都用其上面的配置 就算是关闭了该项目 数据连接那些都不能发生改变 除非用户在配置面板中去重新配置

追答

你早说啊,我去,我还你为你写的是JavaWeb项目,等等我帮你写一个

追问

好的 谢谢了

追答

public class XMLUtil

//先读取指定的XML文件,url是文件的路径
public Document read(String url)
SAXReader reader = new SAXReader();
Document document=null;
try
document = reader.read(url);
catch (DocumentException e)
e.printStackTrace();

return document;

//设置你要改变的XML节点值url就是hibernate.connection.url的值,其他的不解释了,你知道的
public Document change(String url,String username,String password,Document document)
Element root = document.getRootElement();
Element element2 = root.element("session-factory");
for ( Iterator i = element2.elementIterator("property"); i.hasNext(); )
Element element = (Element) i.next();
Attribute attribute = element.attribute("name");
String attrValue = attribute.getValue();
if(attrValue.equals("hibernate.connection.url"))
element.setText(url);

else if(attrValue.equals("hibernate.connection.username"))
element.setText(username);

else if(attrValue.equals("hibernate.connection.password"))
element.setText(password);


return document;

//输出xml,url输出路径
public void write(String url,Document document)
OutputFormat format = OutputFormat.createPrettyPrint();
try
FileWriter fileWriter = new FileWriter(url);
XMLWriter writer = new XMLWriter(fileWriter,format);
writer.write(document);
writer.close();
catch (IOException e)
e.printStackTrace();


public static void main(String[] args)
XMLUtil xmlUtil=new XMLUtil();
Document document = xmlUtil.read("hibernate.cfg.xml");
document=xmlUtil.change("www", "datouxiangzi", "123456", document);
xmlUtil.write("hibernate.cfg.xml", document);

追问

我用了 可是报错耶
org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at XMLUtil.read(XMLUtil.java:30)
at XMLUtil.main(XMLUtil.java:70)
Nested exception:

参考技术C 使用dom4j或者是j4dom对血没了进行操作,具体可以看着两者的文档追问

我对xml不熟 可以麻烦给代码 我现在急需 谢谢

如何在文档中下载和保存 xml,然后如何从文档中解析 xml 文件?

【中文标题】如何在文档中下载和保存 xml,然后如何从文档中解析 xml 文件?【英文标题】:how to Download and save xml in documents and then how to parse xml file from documents? 【发布时间】:2011-03-11 01:46:34 【问题描述】:

在我的应用程序中,我必须解析从互联网下载的 xml 文件。如何下载此 xml 并保存在 iphone 上的文档中?那么如何开始解析保存在文档中的 XML 呢?

【问题讨论】:

【参考方案1】:

第一次加载时将内容下载到NSData 对象。使用任一方法将其保存到磁盘

– writeToFile:atomically:
– writeToFile:options:error:

这里的 NSData 类参考中有描述:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/instm/NSData/writeToFile:atomically:

当您想从磁盘加载它时,请使用[NSData dataWithContentsOfFile:] 再次将其加载到 NSData 对象中。

至于将 NSData 解析为 XML,请查看这个非常非常常见问题的其他答案,例如How do I parse an NSString containing XML in Objective-C?

【讨论】:

【参考方案2】:

你的意思是这样的

NSString *URLString = @"http://www.example.com/XML/note.xml";
NSURL *URL = [NSURL URLWithString:
              [URLString stringByAddingPercentEscapesUsingEncoding:
               NSASCIIStringEncoding]];


NSData *dataXML = [NSData dataWithContentsOfURL:URL];

NSString *applicationDocumentsDir = 
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:@"sample.xml"];
[dataXML writeToFile:storePath atomically:TRUE];
    NSData *contenuto = [NSData dataWithContentsOfFile:storePath];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:contenuto]

【讨论】:

在我看来并不太破旧。它出什么问题了? (请更新您的答案并对我的答案发表评论,而不是回答您的问题 - 当您这样做时我没有收到通知,所以我无法做出反应。)

以上是关于java解析XML修改特定项的值然后保存xml文件,求高手帮忙 急需 在线等的主要内容,如果未能解决你的问题,请参考以下文章

java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行

java怎么在xml文件中保存和读取字符串数组

XML 保存在文件系统上不起作用

如何在文档中下载和保存 xml,然后如何从文档中解析 xml 文件?

XML文件解析实践(DOM解析)

java如何读取xml节点元素值?