我需要在DB中插入xslt文件的值,我尝试了这段代码。我在调试中没有错误但插入没有执行。
我非常感谢您在解决这个问题时可以给我的任何帮助,谢谢。
代码:
Stream stream = resp.GetResponseStream();
XmlTextReader reader = new XmlTextReader(stream);
reader.XmlResolver = null;
XmlDocument doc = new XmlDocument();
doc.Load(reader);
xmlRSS.Document = doc;
XmlNodeList dataNodes = doc.SelectNodes("/title");
OdbcCommand command;
OdbcDataAdapter adpter = new OdbcDataAdapter();
foreach (XmlNode node in dataNodes)
{
string title = node.SelectSingleNode("title").InnerText;
string sql = "insert into Product values(" + title.ToString() + ")";
command = new OdbcCommand(sql, connection);
adpter.InsertCommand = command;
adpter.InsertCommand.ExecuteNonQuery();
}
XSLT文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:param name="title"/>
<xsl:template match="rss">
<xsl:for-each select="channel/item">
<br>
<strong>
<a href="{link}" target="_main">
<xsl:value-of select="title"/>
</a>
</strong>
<br></br>
<xsl:value-of select="description" disable-output-escaping="yes"/>
</br>
<br></br>
<xsl:value-of select="pubDate"/>
<br></br>
</xsl:for-each>
</xsl:template>
<xsl:template match="description">
<br>
<xsl:value-of select="."/>
</br>
</xsl:template>
</xsl:stylesheet>
SQL注入的新版本,但在DB寄存器中只有XSLT文件的标题:
foreach (XmlNode node in dataNodes)
{
string titlenew = node.SelectSingleNode("//title").InnerText;
string descriptionnew = node.SelectSingleNode("//description").InnerText;
string pubDatenew = node.SelectSingleNode("//pubDate").InnerText;
string sql = "insert into Product (title, description, pubdate) values (?,?, STR_TO_DATE(?, '%a, %d %b %Y %H:%i:%s GMT'));";
connection.Open();
command = new OdbcCommand(sql, connection);
command.Parameters.AddWithValue("param1", titlenew.ToString());
command.Parameters.AddWithValue("param2", descriptionnew.ToString());
command.Parameters.AddWithValue("param3", pubDatenew.ToString());
adpter.InsertCommand = command;
adpter.InsertCommand.ExecuteNonQuery();
connection.Close();
}
这是浏览器上的RSS文件(查看源代码)。
我需要在DB中插入值:
我的代码现在只插入数据库:
For Pubdate:Fri,04 Apr 2014 13:57:16 GMT。
<title>News</title>
<link>http://....
<description>News</description>
<pubDate>Fri, 04 Apr 2014 13:57:16 GMT</pubDate>
<dc:date>2014-04-04T13:57:16Z</dc:date>
<image>
<title>News</title>
<url>http://....</url>
<link>http://....
</image>
<item>
<title>ASP.NET & Web Development</title>
<link>http://.....
<description>ASP.NET & Web Development .....</description>
<category>
</category>
<pubDate>Wed, 26 Feb 2014 09:39:00 GMT</pubDate>
<guid isPermaLink="false">http://.....</guid>
<dc:title>ASP.NET & Web Development</dc:title>
<dc:creator>
</dc:creator>
<dc:description>ASP.NET & Web Development</dc:description>
<dc:date>2014-02-26T09:39:00Z</dc:date>
<dc:type>eip_news</dc:type>
<dc:source>ASP.NET & Web Development</dc:source>
<dc:language>us_US</dc:language>
</item>
<item>
<title>In Focus</title>
<link>http://.....
<description>In Focus ..... </description>
<category>
</category>
<pubDate>Wed, 26 Feb 2014 09:39:00 GMT</pubDate>
<guid isPermaLink="false">http://.....</guid>
<dc:title>In Focus</dc:title>
<dc:creator>
</dc:creator>
<dc:description>In Focus</dc:description>
<dc:date>2014-02-26T09:39:00Z</dc:date>
<dc:type>eip_news</dc:type>
<dc:source>In Focus</dc:source>
<dc:language>us_US</dc:language>
</item>
答案 0 :(得分:0)
我会尝试在您的查询中添加引号,即:
string sql = "insert into Product values('" + title.ToString() + "')";
否则我认为SQL解析器很难被标题字符串中包含的引号搞糊涂。
答案 1 :(得分:0)
感谢您提供的详细信息(XML示例等)。
将您提供的XSLT应用于您提供的XML数据,将获得一个简单的HTML页面,该页面仅包含RSS项目列表(链接标题,描述和发布日期)。
但是,如果我没有错(看你的例子)你需要一个不同的东西:你想在你的数据库中插入所有项目的标题,描述和发布日期,甚至是RSS feed(第一个标题,您在XML文件中遇到的描述和pubDate):我无法理解您为什么要这样做,但无论如何这是我对您的要求的理解。
如果是这样,那么我认为问题并不是专门处理数据插入数据库表的代码部分,而是选择在XML文件上运行的数据。
这是我的代码(你的XML片段是xml
):
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
foreach (XmlNode xmlTitle in xmlDoc.SelectNodes("//title"))
{
XmlNode xmlDescription = xmlTitle.ParentNode.SelectSingleNode("description");
XmlNode xmlPubDate = xmlTitle.ParentNode.SelectSingleNode("pubDate");
if (xmlDescription != null && xmlPubDate != null)
{
// Instead of printing to console PUT HERE your code to insert data into database
Console.WriteLine(xmlTitle.InnerText);
Console.WriteLine(xmlDescription.InnerText);
Console.WriteLine(xmlPubDate.InnerText);
Console.WriteLine();
}
}
产生的输出如下:
News
News
Fri, 04 Apr 2014 13:57:16 GMT
ASP.NET & Web Development
ASP.NET & Web Development .....
Wed, 26 Feb 2014 09:39:00 GMT
In Focus
In Focus .....
Wed, 26 Feb 2014 09:39:00 GMT
我认为您需要满足您的要求。
您只需使用自己的SQL注入安全代码将它们放入数据库表中,而不是将所有这些数据转储到控制台。