<?xml version="1.0" encoding="utf-8" ?>
<urlset>
<url>
<loc>http://jobs.zhaopin.com/P5/CC0000/1824/J902/500/CC000018244J90250002000.htm</loc>
<lastmod>2010-04-06</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
<data>
<display>
<title><![CDATA[ HPSW-Senior R&D Manager-Shanghai]]></title>
<expirationdate>2011-01-17</expirationdate>
<description><![CDATA[ HP is a leading global provider of products, technologies, solutions and services to consumers and business.
The company's offerings span IT infrastructure, personal computing and access devices, global services, and printing.
Our $4 billion annual R&D investment fuels the invention of products, solutions and new technologies.
We invent, engineer that drive business value, improve the lives of our customers. ]]></description>
<type>社会招聘</type>
<city>上海</city>
<employer><![CDATA[ 惠普公司]]></employer>
<email><![CDATA[ https://hp.taleo.net/careersection/2/jobdetail.ftl?lang=en&job=1720103&media_id=1009&src=Zhaopin]]></email>
<jobfirstclass><![CDATA[ 计算机软、硬件/互联网/IT]]></jobfirstclass>
<jobsecondclass><![CDATA[ 高级软件工程师]]></jobsecondclass>
<education>本科</education>
<experience>5年以上</experience>
<startdate>2010-04-05</startdate>
<enddate>2011-01-17</enddate>
<salary>面议</salary>
<industry><![CDATA[ IT服务(系统/数据/维护)/多领域经营,计算机硬件及网络设备]]></industry>
<employertype>合资</employertype>
<source>智联招聘</source>
<sourcelink><![CDATA[http://www.zhaopin.com/]]></sourcelink>
</display>
</data>
</url>
<url>
<loc>http://jobs.zhaopin.com/P2/CC1204/9901/J902/501/CC120499019J90250131000.htm</loc>
<lastmod>2010-05-13</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
<data>
<display>
<title><![CDATA[城市销售代表(温州/宁波)]]></title>
<expirationdate>2010-07-25</expirationdate>
<description><![CDATA[岗位职责:分别负责东芝宏碁产品温州及周边和宁波及周边区域销售,包括该品牌数码港,4-6级指标销售。
岗位要求:
1,本科以上,一年以上IT或快销销售经验,有渠道和区域销售经验者优先考虑;
2,本科以上,一年以上IT或快销销售经验,有渠道和区域销售经验者优先考虑]]></description>
<type>社会招聘</type>
<city>宁波</city>
<employer><![CDATA[杭州神州数码有限公司]]></employer>
<email><![CDATA[]]></email>
<jobfirstclass><![CDATA[销售业务]]></jobfirstclass>
<jobsecondclass><![CDATA[渠道/分销专员]]></jobsecondclass>
<education>本科</education>
<experience>1-3年</experience>
<startdate>2010-05-13</startdate>
<enddate>2010-07-25</enddate>
<salary>1000-50000元/月</salary>
<industry><![CDATA[计算机硬件及网络设备,计算机软件,IT服务(系统/数据/维护)/多领域经营,通讯(设备/运营/增值服务)]]></industry>
<employertype>合资</employertype>
<source>智联招聘</source>
<sourcelink><![CDATA[http://www.zhaopin.com/]]></sourcelink>
</display>
</data>
</url>
<url>
...
</url>
...
</urlset>
首先看生成的xml 格式如上图
然后看数据表中的字段
字段名 字段内容
urlset 只需填写urlset
url 具体某一个链接的定义入口,每一条数据都要用包含在里面
loc 描述详细信息页面URL地址
lastmod 用来指定该文件的最后更新时间,时间格式为:2010-09-10
changefreq 标识页面可能会出现的更新频率
有效值为:always, hourly,daily,weekly,mothly,yearly,never
priority 标识此网页的优先级。有效值范围从 0.0 到 1.0
title 职位名称
description 职位描述,内容可以为空,
内容为普通文本。
文本内可以换行,但不
得包含字体,字号,间距等
格式定义标签。
city 工作地点
正确格式如“佛山”、“佛山市”
employer 公司名称
education 学历要求,如“大专”,“本科”等。
若无要求请填写“不限”
不得为空。
experience 工作经验要求。如“3-5年”,“2年以上”。
若无要求请填写“不限”
不得为空。
startdate 职位信息发布日期。格式:2010-02-16
enddate 职位信息截止日期。格式:2010-02-24
salary 薪资要求,可为以下3种格式
1)“面议”
2)“aaaa-bbbb元”
3)“aaaa元”
不得为空
type 工作性质(实习、兼职、校招等)
industry 公司所属行业。如“IT”,“金融”等
jobfirstclass 职位大类,如“销售”
jobsecondclass 职位小类,如“销售代表”,“电话销售”
email 公司联系Email
expirationdate 职位信息发布的结束日期
格式:2009-12-22
employertype 公司性质。如“国企”,“私企”等
source 网站名称,如“智联招聘”
sourcelink 网站url,如“www.zhaopin.com”
可以看出,xml每一个根节点,子节点都是从数据库表里读取出来的
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
xmlDoc.AppendChild(dec);
XmlElement root = xmlDoc.CreateElement("urlset");
xmlDoc.AppendChild(root);
XmlNode url = xmlDoc.CreateElement("url");
root.AppendChild(url);
然后用此方法添加所有节点
至于 cdata
XmlNode miaoshu = xmlDoc.CreateCDataSection("这里是描述.......");
description.AppendChild(miaoshu);
用的是这类增加
最后,生成xml
xmlDoc.Save(dir+"ss.xml");
好了,现在问题来了!!!
我现在要读取数据库表,把表里的所有公司的招聘信息都导出到xml
我的想法是,每个节点使用变量=数据库表字段,每个节点的内容用innertext方法添加,把字段里的内容赋值到变量中插入节点
但是,实践并没有想象的那么简单
有没有大虾做过类似的,指教一下小弟,万分感激!!!
越详细越好!!!
从查找字段到赋值到输出到xml,越详细越好
urlset根节点,然后每一个url节点都是一家公司的招聘信息
唉,小弟不才,头都快爆了
求大侠
求相关源码
11 个解决方案
#1
夜深了。。太长了没有看完。
XML基本操作会吗?
XML基本操作会吗?
#2
测试数据
相关代码
结果:
测试数据库为testdb,数据库连接字符串修改成你自己的...
操作XML用的是LINQ TO XML,需引用System.Xml.Linq
这里只弄了两个字段,其余字段你自己处理。。。。
use testdb
create table company
(
loc nvarchar(255),
lastmod nvarchar(255)
)
insert into company
select 'http://111.htm','2010-04-06' union all
select 'http://222.htm','2010-04-07' union all
select 'http://333.htm','2010-04-08'
相关代码
using (SqlConnection conn = new SqlConnection("server=.;user id=sa;pwd=111;database=testdb;"))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from company";
cmd.Connection = conn;
SqlDataReader dr = cmd.ExecuteReader();
XDocument document = new XDocument();
XElement root = new XElement("urlset");
while (dr.Read())
{
XElement element = new XElement("url");
element.Add(new XElement(dr.GetName(0), dr.GetValue(0)), new XElement(dr.GetName(1), dr.GetValue(1)));
root.Add(element);
}
document.Add(root);
document.Save(Server.MapPath("~/test.xml"));
}
结果:
<?xml version="1.0" encoding="utf-8"?>
<urlset>
<url>
<loc>http://111.htm</loc>
<lastmod>2010-04-06</lastmod>
</url>
<url>
<loc>http://222.htm</loc>
<lastmod>2010-04-07</lastmod>
</url>
<url>
<loc>http://333.htm</loc>
<lastmod>2010-04-08</lastmod>
</url>
</urlset>
测试数据库为testdb,数据库连接字符串修改成你自己的...
操作XML用的是LINQ TO XML,需引用System.Xml.Linq
这里只弄了两个字段,其余字段你自己处理。。。。
#3
先帮LZ顶,明天再看
#5
大家们都这么晚睡觉
#6
2楼的不错,用了linq
但是,我现在迷惑了
这代码可以很方便的生成主要的节点,但是,问题来了,先给看一下现在的xml
data节需要插入很多信息,还要增加CDATA
效果如图
我该怎么去把这些信息插入到data节点里呢?
但是,我现在迷惑了
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=pp;Integrated Security=True");
string zhujiedian = "select loc,lastmod,changefreq,priority,data from pp";
conn.Open();
SqlCommand cmd = new SqlCommand(zhujiedian,conn);
SqlDataReader dr = cmd.ExecuteReader();
XDocument document = new XDocument();
XElement root = new XElement("urlset");
while (dr.Read())
{
XElement element = new XElement("url");
for (int i = 0; i < dr.FieldCount; i++)
{
element.Add(new XElement(dr.GetName(i), dr.GetValue(i)));
}
root.Add(element);
}
document.Add(root);
document.Save(@"c:\test.xml");
这代码可以很方便的生成主要的节点,但是,问题来了,先给看一下现在的xml
<?xml version="1.0" encoding="utf-8" ?>
- <urlset>
- <url>
<loc>http://jobs.zhaopin.com/P5/CC0000/1824/J902/500/CC000018244J90250002000.htm</loc>
<lastmod>2010-04-06</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
<data />
</url>
</urlset>
data节需要插入很多信息,还要增加CDATA
效果如图
- <data>
- <display>
- <title>
- <![CDATA[ HPSW-Senior R&D Manager-Shanghai
]]>
</title>
<expirationdate>2011-01-17</expirationdate>
- <description>
- <![CDATA[
HP is a leading global provider of products, technologies, solutions and services to consumers and business.
The company's offerings span IT infrastructure, personal computing and access devices, global services, and printing.
Our $4 billion annual R&D investment fuels the invention of products, solutions and new technologies.
We invent, engineer that drive business value, improve the lives of our customers.
]]>
</description>
<type>社会招聘</type>
<city>上海</city>
- <employer>
- <![CDATA[ 惠普公司
]]>
</employer>
- <email>
- <![CDATA[ https://hp.taleo.net/careersection/2/jobdetail.ftl?lang=en&job=1720103&media_id=1009&src=Zhaopin
]]>
</email>
- <jobfirstclass>
- <![CDATA[ 计算机软、硬件/互联网/IT
]]>
</jobfirstclass>
- <jobsecondclass>
- <![CDATA[ 高级软件工程师
]]>
</jobsecondclass>
<education>本科</education>
<experience>5年以上</experience>
<startdate>2010-04-05</startdate>
<enddate>2011-01-17</enddate>
<salary>面议</salary>
- <industry>
- <![CDATA[ IT服务(系统/数据/维护)/多领域经营,计算机硬件及网络设备
]]>
</industry>
<employertype>合资</employertype>
<source>智联招聘</source>
- <sourcelink>
- <![CDATA[ http://www.zhaopin.com/
]]>
</sourcelink>
</display>
</data>
我该怎么去把这些信息插入到data节点里呢?
#7
最简单的办法 直接把数据处理下 包裹下下呗,
string data="<![CDATA[ "+data+"]]> ";
OK
string data="<![CDATA[ "+data+"]]> ";
OK
#8
01 string myXml =
02 @"<!--?xml version='1.0' encoding='utf-8'?-->
03 <workingset>
04 <data>
05 </data>
06 </workingset>";
07
08 XmlDocument doc1 = new XmlDocument();
09
10 doc1.LoadXml(myXml);
11
12 XmlNode target = doc1.SelectSingleNode("WorkingSet/Data");
13
14 if (target != null)
15 target.AppendChild(doc1.CreateCDataSection("
16 <customertag>Hello</customertag>
17 "));
使用 XDocument
view source
print?
1 XDocument doc = XDocument.Parse(myXml, LoadOptions.SetLineInfo);
2
3 XElement dataNode = doc.Descendants("Data").First();
4
5 dataNode.Add(new XCData("
6
7 <customertag>Hello</customertag>
8
9 Console.WriteLine(doc.ToString());
結果
view source
print?
1 <!--?xml version="1.0" encoding="utf-8"?-->
2 <workingset>
3 <data><!--[CDATA[<customertag-->Hello]]></data>
4 </workingset>
#9
你想把SQL Server数据库中的信息,查询出来,然后以XML文档保存?据我所知,直接用SQL Server数据库里面的函数转换,或者在.NET里面编程select数据后,构造xml文档。若你需要限制每个element的值类型和范围的话,应该需要*.xsd文件限制你生成的xml文档吧。
#10
一条url节点难点,难道会有两条data节点? 看你的数据表结构,不应该把,
你直接用title这些节点呗,把data节点去掉
#11
难点 去掉
#1
夜深了。。太长了没有看完。
XML基本操作会吗?
XML基本操作会吗?
#2
测试数据
相关代码
结果:
测试数据库为testdb,数据库连接字符串修改成你自己的...
操作XML用的是LINQ TO XML,需引用System.Xml.Linq
这里只弄了两个字段,其余字段你自己处理。。。。
use testdb
create table company
(
loc nvarchar(255),
lastmod nvarchar(255)
)
insert into company
select 'http://111.htm','2010-04-06' union all
select 'http://222.htm','2010-04-07' union all
select 'http://333.htm','2010-04-08'
相关代码
using (SqlConnection conn = new SqlConnection("server=.;user id=sa;pwd=111;database=testdb;"))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from company";
cmd.Connection = conn;
SqlDataReader dr = cmd.ExecuteReader();
XDocument document = new XDocument();
XElement root = new XElement("urlset");
while (dr.Read())
{
XElement element = new XElement("url");
element.Add(new XElement(dr.GetName(0), dr.GetValue(0)), new XElement(dr.GetName(1), dr.GetValue(1)));
root.Add(element);
}
document.Add(root);
document.Save(Server.MapPath("~/test.xml"));
}
结果:
<?xml version="1.0" encoding="utf-8"?>
<urlset>
<url>
<loc>http://111.htm</loc>
<lastmod>2010-04-06</lastmod>
</url>
<url>
<loc>http://222.htm</loc>
<lastmod>2010-04-07</lastmod>
</url>
<url>
<loc>http://333.htm</loc>
<lastmod>2010-04-08</lastmod>
</url>
</urlset>
测试数据库为testdb,数据库连接字符串修改成你自己的...
操作XML用的是LINQ TO XML,需引用System.Xml.Linq
这里只弄了两个字段,其余字段你自己处理。。。。
#3
先帮LZ顶,明天再看
#4
#5
大家们都这么晚睡觉
#6
2楼的不错,用了linq
但是,我现在迷惑了
这代码可以很方便的生成主要的节点,但是,问题来了,先给看一下现在的xml
data节需要插入很多信息,还要增加CDATA
效果如图
我该怎么去把这些信息插入到data节点里呢?
但是,我现在迷惑了
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=pp;Integrated Security=True");
string zhujiedian = "select loc,lastmod,changefreq,priority,data from pp";
conn.Open();
SqlCommand cmd = new SqlCommand(zhujiedian,conn);
SqlDataReader dr = cmd.ExecuteReader();
XDocument document = new XDocument();
XElement root = new XElement("urlset");
while (dr.Read())
{
XElement element = new XElement("url");
for (int i = 0; i < dr.FieldCount; i++)
{
element.Add(new XElement(dr.GetName(i), dr.GetValue(i)));
}
root.Add(element);
}
document.Add(root);
document.Save(@"c:\test.xml");
这代码可以很方便的生成主要的节点,但是,问题来了,先给看一下现在的xml
<?xml version="1.0" encoding="utf-8" ?>
- <urlset>
- <url>
<loc>http://jobs.zhaopin.com/P5/CC0000/1824/J902/500/CC000018244J90250002000.htm</loc>
<lastmod>2010-04-06</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
<data />
</url>
</urlset>
data节需要插入很多信息,还要增加CDATA
效果如图
- <data>
- <display>
- <title>
- <![CDATA[ HPSW-Senior R&D Manager-Shanghai
]]>
</title>
<expirationdate>2011-01-17</expirationdate>
- <description>
- <![CDATA[
HP is a leading global provider of products, technologies, solutions and services to consumers and business.
The company's offerings span IT infrastructure, personal computing and access devices, global services, and printing.
Our $4 billion annual R&D investment fuels the invention of products, solutions and new technologies.
We invent, engineer that drive business value, improve the lives of our customers.
]]>
</description>
<type>社会招聘</type>
<city>上海</city>
- <employer>
- <![CDATA[ 惠普公司
]]>
</employer>
- <email>
- <![CDATA[ https://hp.taleo.net/careersection/2/jobdetail.ftl?lang=en&job=1720103&media_id=1009&src=Zhaopin
]]>
</email>
- <jobfirstclass>
- <![CDATA[ 计算机软、硬件/互联网/IT
]]>
</jobfirstclass>
- <jobsecondclass>
- <![CDATA[ 高级软件工程师
]]>
</jobsecondclass>
<education>本科</education>
<experience>5年以上</experience>
<startdate>2010-04-05</startdate>
<enddate>2011-01-17</enddate>
<salary>面议</salary>
- <industry>
- <![CDATA[ IT服务(系统/数据/维护)/多领域经营,计算机硬件及网络设备
]]>
</industry>
<employertype>合资</employertype>
<source>智联招聘</source>
- <sourcelink>
- <![CDATA[ http://www.zhaopin.com/
]]>
</sourcelink>
</display>
</data>
我该怎么去把这些信息插入到data节点里呢?
#7
最简单的办法 直接把数据处理下 包裹下下呗,
string data="<![CDATA[ "+data+"]]> ";
OK
string data="<![CDATA[ "+data+"]]> ";
OK
#8
01 string myXml =
02 @"<!--?xml version='1.0' encoding='utf-8'?-->
03 <workingset>
04 <data>
05 </data>
06 </workingset>";
07
08 XmlDocument doc1 = new XmlDocument();
09
10 doc1.LoadXml(myXml);
11
12 XmlNode target = doc1.SelectSingleNode("WorkingSet/Data");
13
14 if (target != null)
15 target.AppendChild(doc1.CreateCDataSection("
16 <customertag>Hello</customertag>
17 "));
使用 XDocument
view source
print?
1 XDocument doc = XDocument.Parse(myXml, LoadOptions.SetLineInfo);
2
3 XElement dataNode = doc.Descendants("Data").First();
4
5 dataNode.Add(new XCData("
6
7 <customertag>Hello</customertag>
8
9 Console.WriteLine(doc.ToString());
結果
view source
print?
1 <!--?xml version="1.0" encoding="utf-8"?-->
2 <workingset>
3 <data><!--[CDATA[<customertag-->Hello]]></data>
4 </workingset>
#9
你想把SQL Server数据库中的信息,查询出来,然后以XML文档保存?据我所知,直接用SQL Server数据库里面的函数转换,或者在.NET里面编程select数据后,构造xml文档。若你需要限制每个element的值类型和范围的话,应该需要*.xsd文件限制你生成的xml文档吧。
#10
一条url节点难点,难道会有两条data节点? 看你的数据表结构,不应该把,
你直接用title这些节点呗,把data节点去掉
#11
难点 去掉