c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去

c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去,第1张

直接用项目里面的appconfig或是webconfig最方便。

在里面的appSettings段里加一个元素:

<appSettings>

<add key="mypath" value="thepath"/>

</appSettings>

可以直接用ConfigurationManager读取:

string pathStr = ConfigurationManagerAppSettings["mypath"]ToString();;

SQL Server 使得以XML导出数据变得更加简单 但在SQL Server 中导入XML数据并对其进行处理则有些麻烦

如果你参考Books Online(BOL) 你会发现有相关的条目 包括OPENXML以及 OPENROWSET 所有的这些例子都支持将XML文本作为已经声明的变量 这对于经常处理文本的用户来说非常方便 但对于希望在开发中读取XML文件并进行相应处理的开发人员来说就不是这样了 处理这样的问题 或许最好从内到外来对其进行分析

OPENXML是一个rowset函数(即返回一个rowset) 它的工作方式类似于rowset函数OPENQUERY和 OPENROWSET 使用OPENXML可以对XML数据执行JOINs *** 作而无需首先导入数据 你还可以将其同INSERT SELECT UPDATE以及DELETE等 *** 作联合使用 然而 要使用OPENXML 你必须执行两项OPENQUERY和OPENROWSET并不需要的任务 这两项任务需要两个系统存储进程 第一个是sp_xml_preparedocument 它将读取特定的XML文本并将其内容提取到内存中 其语法如下

sp_xml_preparedocument @hdoc = OUTPUT

[ @xmltext = ]

[ @xpath_namespaces =

具体参数如下 @hdoc 指向某内存区域的句柄(从作用上看等同于一个指针) 相关数据存放在这里 注意这是一个输出变量 当该进程运行后 该变量将包含指向XML文件内容在内存地址的句柄 由于你需要在随后使用此结果 因此要确保对其进行保存; @xmltext 实际上你所希望处理的XML文本; @xml_namespaces 为了正常 *** 作你的XML数据所需要的任何名字空间索引(namespace references) 注意在这里出现的任何URL都需要用尖括号(< >)括起来; 假设所传递的这些参数都有效 并且XML文档存在 那么你的XML数据就会被存放到内存中去 现在你就可以调用 sp_xml_preparedocument 传递存放有XML文件的变量 然后执行OPENXML 语法如下

OPENXML(idocint [in] rowpatternnvarchar[in] [flag yte[in]])

[WITH (SchemaDeclaration | TableName)]

注意 在本文中没有足够的文字来描述OPENXML所接收的参数 请参阅BOL以获取更多信息 在Transact SQL Reference中查找OPENXML

现在我们已经到达了最后的步骤 所有剩下的工作就是导入一个实际的XML文件到SQL并进行处理(很奇快为什么所有的BOL示例都没有涉及到这一关键的部分) (我必须感谢我的同事Billy Pang所给予的帮助 他帮助我解决这个问题 并给出了代码——尽管出于本文需要我对代码进行了裁减 谢谢Billy!) 基本的技巧是 将文件逐行按文本读取 然后把所有读取的行连接为一个大的VARCHAR变量 最后 将变量传递给前面所说的代码

以下就是读取文件并将其内容存放到某变量的代码

DECLARE @FileName varchar( )

DECLARE @ExecCmd VARCHAR( )

DECLARE @y INT

DECLARE @x INT

DECLARE @FileContents VARCHAR( )

CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY( ) ThisLine VARCHAR( ))

SET @FileName = C:\Temp\CurrentSettings xml

SET @ExecCmd = type + @FileName

SET @FileContents =

INSERT INTO #tempXML EXEC master dbo xp_cmdshell @ExecCmd

SELECT @y = count() from #tempXML

SET @x =

WHILE @x < > @y

BEGIN

SET @x = @x +

SELECT @FileContents = @FileContents + ThisLine from #tempXML WHERE PK

= @x

END

SELECT @FileContents as FileContents

DROP TABLE #tempXML

现在在变量@FileContents变量中你已经获得了文件的全部内容 所需要做的只是将变量通过@xmltext参数传递给sp_xml_preparedocument 然后再调用OPENXML

lishixinzhi/Article/program/SQLServer/201311/22101

DocumentBuilderFactory domfac=DocumentBuilderFactorynewInstance();

try {

DocumentBuilder dombuilder=domfacnewDocumentBuilder();

InputStream is=new FileInputStream("d:/domxml");

Document doc= dombuilderparse(is);

Element root=docgetDocumentElement();

NodeList books=((Node) root)getChildNodes();

if(books!=null){

for(int i=0;i<booksgetLength();i++){

Node book=booksitem(i);

if(bookgetNodeType()==NodeELEMENT_NODE){

String URL=bookgetAttributes()getNamedItem("url")getNodeValue();

Systemoutprintln(URL);

for(Node node=bookgetFirstChild();node!=null;node=nodegetNextSibling()){

if(nodegetNodeType()==NodeELEMENT_NODE){

if(nodegetNodeName()equals("property")){

String name=nodegetAttributes()getNamedItem("name")getNodeValue();

// String name1=nodegetFirstChild()getNodeValue();

if(nameequals("user"))

{

String value=nodegetAttributes()getNamedItem("value")getNodeValue();

Systemoutprintln(value);

}

if(nameequals("password"))

{

String value=nodegetAttributes()getNamedItem("value")getNodeValue();

Systemoutprintln(value);

}

}

}

}

}

}

}

}

catch (Exception e) {

// TODO: handle exception

egetStackTrace();

}

}

已经完成,用的是DOM解析。获取url,user,password。还有不理解可以再询问。

一、环境:

主机:WIN8

开发环境:Eclipse

二、说明:

1打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置

2读取xml文件

三、xml文件格式:

<xml version="10" encoding="UTF-8" standalone="true">

-<config>

<title>远程视频会见系统</title>

<local_port>12600</local_port>

<schedule_service_ip>1058159</schedule_service_ip>

<schedule_service_port>12601</schedule_service_port>

</config>

四、源代码:

package comexamplehelloanychat;

import javaioFile;

import javaioFileInputStream;

import javaioFileOutputStream;

import javaioIOException;

import javaioStringWriter;

import javanetInet6Address;

import javanetInetAddress;

import javanetNetworkInterface;

import javanetSocketException;

import javautilEnumeration;

import javaxxmlparsersDocumentBuilder;

import javaxxmlparsersDocumentBuilderFactory;

import androidosEnvironment;

import androidutilLog;

import orgw3cdomDocument;

import orgw3cdomElement;

import orgw3cdomNodeList;

import orgxmlpullv1XmlPullParserFactory;

import orgxmlpullv1XmlSerializer;

/

配置信息类

新建日期:2014/12/8 by jdh

/

public class Config implements IF_Config {

//配置信息

private Config_Info config_info = new Config_Info();

/

构造函数

/

public Config() {

boolean ok;

File sd_path;

File file_cfg_dir;

File file_cfg;

FileOutputStream out;

String str;

FileInputStream in;

//得到本机ip地址

config_infolocal_ip = getLocalIpAddress();

Systemoutprintf("本机ip:%s\n", config_infolocal_ip);

//获取SD卡目录

sd_path = EnvironmentgetExternalStorageDirectory();

//判断文件夹是否存在

file_cfg_dir = new File(sd_pathgetPath() + "//Remote_Meeting");

if (!file_cfg_direxists() && !file_cfg_dirisDirectory()) {

Systemoutprintln("配置文件夹Remote_Meeting不存在!");

ok = file_cfg_dirmkdirs();

if (ok) {

Systemoutprintln("创建文件夹成功!");

} else {

Systemoutprintln("创建文件夹失败!");

}

}

//判断配置文件是否存在

file_cfg = new File(file_cfg_dirgetPath(),"cfgxml");

if (!file_cfgexists())

{

Systemoutprintln("配置文件cfgxml不存在!");

try {

file_cfgcreateNewFile();

Systemoutprintln("创建文件cfgxml成功!");

//生成初始化的配置数据

try {

out = new FileOutputStream(file_cfg);

//保存默认配置

config_infotitle = "远程视频会见系统";

config_infolocal_port = 12600;

config_infoschedule_server_ip = "1058159";

config_infoschedule_server_port = 12601;

str = produce_xml_string(config_info);

outwrite(strgetBytes());

outclose();

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

config_infotitle = "远程";

config_infolocal_port = 126;

config_infoschedule_server_ip = "105";

config_infoschedule_server_port = 12;

Systemoutprintf("----222222222%s,%d,%s,%d\n",config_infotitle,config_infolocal_port,

config_infoschedule_server_ip,config_infoschedule_server_port);

//解析xml文件

try {

in = new FileInputStream(file_cfg);

DocumentBuilderFactory factory = DocumentBuilderFactorynewInstance();

DocumentBuilder builder = factorynewDocumentBuilder();

Document document = builderparse(in);

// 获取根节点

Element root = documentgetDocumentElement();

NodeList node = rootgetChildNodes();

//获得第1子节点:标题

config_infotitle = nodeitem(0)getFirstChild()getNodeValue();

//获得第2子节点:本机端口

config_infolocal_port = IntegerparseInt(nodeitem(1)getFirstChild()getNodeValue());

//获得第3子节点:调度服务器ip

config_infoschedule_server_ip = nodeitem(2)getFirstChild()getNodeValue();

//获得第4子节点:调度服务器端口

config_infoschedule_server_port = IntegerparseInt(nodeitem(3)getFirstChild()getNodeValue());

Systemoutprintf("----222222222%s,%d,%s,%d\n",config_infotitle,config_infolocal_port,

config_infoschedule_server_ip,config_infoschedule_server_port);

} catch (Exception e) {

eprintStackTrace();

}

}

@Override

public Config_Info get_config_info() {

return config_info;

}

/

得到本机ip地址

@return 本机ip地址

/

private String getLocalIpAddress() {

try {

for (Enumeration<NetworkInterface> en = NetworkInterface

getNetworkInterfaces(); enhasMoreElements();) {

NetworkInterface intf = ennextElement();

for (Enumeration<InetAddress> enumIpAddr = intf

getInetAddresses(); enumIpAddrhasMoreElements();) {

InetAddress inetAddress = enumIpAddrnextElement();

//if (!inetAddressisLoopbackAddress()) {

if (!inetAddressisLoopbackAddress() && !(inetAddress instanceof Inet6Address)) {

return inetAddressgetHostAddress()toString();

}

}

}

} catch (SocketException ex) {

Loge("WifiPreference IpAddress", extoString());

}

return null;

}

/

生成xml配置文件的String数据流

Config_Info的本机ip信息不会保存

@param info:配置信息

@return xml的String数据流

/

private String produce_xml_string(Config_Info info) {

StringWriter stringWriter = new StringWriter();

try {

// 获取XmlSerializer对象

XmlPullParserFactory factory = XmlPullParserFactorynewInstance();

XmlSerializer xmlSerializer = factorynewSerializer();

// 设置输出流对象

xmlSerializersetOutput(stringWriter);

//开始标签

xmlSerializerstartDocument("utf-8", true);

xmlSerializerstartTag(null, "config");

//标题

xmlSerializerstartTag(null, "title");

xmlSerializertext(infotitle);

xmlSerializerendTag(null, "title");

//本机端口

xmlSerializerstartTag(null, "local_port");

xmlSerializertext(IntegertoString(infolocal_port));

xmlSerializerendTag(null, "local_port");

//调度服务器ip

xmlSerializerstartTag(null, "schedule_service_ip");

xmlSerializertext(infoschedule_server_ip);

xmlSerializerendTag(null, "schedule_service_ip");

//调度服务器端口

xmlSerializerstartTag(null, "schedule_service_port");

xmlSerializertext(IntegertoString(infoschedule_server_port));

xmlSerializerendTag(null, "schedule_service_port");

xmlSerializerendTag(null, "config");

xmlSerializerendDocument();

} catch (Exception e) {

eprintStackTrace();

}

return stringWritertoString();

}

}

php是可以读取读取xml文件的。同时也可以遍历节点。网上有很多方法。你可以百度下。这里给你贴代码的话有很多代码。

举例:

有个名字为axml的文件

。内容为:

xml

version=”10″

encoding=”gb2312″

111

2222

3333

读取:

php

$xml

=

new

domdocument();

$xml-

load('axml');

foreach($xml->getelementsbytagname('list')

as

$list)

{

$value

=

$list->firstchild->nodevalue;

echo

$value”

”;

}

>

输出为:111

222

333

构建XML文档对象在解析XML文档前,需要构建要解析的XML文件所对应的XML文档对象。在获取XML文档对象时,首先需要创建SAXReader对象,然后调用该对象的read()方法获取对应的XML文档对象,然后调用XML文档对象里的实例变量(就是XML里面的数据)。具体代码如下:StringfileURL=requestgetRealpath(“XML的路径”);SAXReaderreader=newSAXReader();Documentdocument=readerread(newFile(fileURL));然后用对象document调用XML里面的数据。希望这个能帮助到你

C#

读取XML文件在5个步骤

//1、创建XmlDocument对象

XmlDocument

xmlDoc

=

new

XmlDocument();

//2、加载源文件

xmlDocLoad("文件名xml");

//3、获取根结点

XmlElement

xmlRoot

=

xmlDocDocumentElement;

//4、获取根结点下的子节点

foreach

以上就是关于c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去全部的内容,包括:c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去、SQLServer读取XML文件的做法、如何读取如下格式的xml文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9815761.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存