GVKun编程网logo

如何使用T-SQL从URL读取XML?

8

如果您对如何使用T-SQL从URL读取XML?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于如何使用T-SQL从URL读取XML?的详细内容,并且为您提供关于.net–如何

如果您对如何使用T-SQL从URL读取XML?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于如何使用T-SQL从URL读取XML?的详细内容,并且为您提供关于.net – 如何使用LINQ to XML读取/写入加密的XML文件?、c# – 如何从url读取csv文件?、c# – 如何使用Web代理从Internet读取XML?、C#中如何使用 XmlReader 读取XML文件的有价值信息。

本文目录一览:

如何使用T-SQL从URL读取XML?

如何使用T-SQL从URL读取XML?

在url中有xml文件:
<response>
<sum>0</sum>
<result>0</result>
<comment>sel*1.9488|buy*1.9453</comment>
</response>

现在想要存储过程,我可以从url解析这个xml文件,并更新为< comment>中的列值.ll * 1.9488 | buy * 1.9453< / comment>想添加购买* 1.9453到我的桌子.怎么样?

解决方法

要从URL获取XML,您需要执行以下操作:

启用Ole Automation Procedures

sp_configure 'show advanced options',1;
GO
RECONfigURE;
GO
sp_configure 'Ole Automation Procedures',1;
GO
RECONfigURE;
GO

然后,为了从URL获取XML(基于here的更新版本回答),下面创建一个临时表来存储该值,以便您可以使用xpath和子字符串处理结果.

这是一个使用google maps xml的工作示例,您需要更新url和xpath以满足您的特定要求.

USE tempdb
GO

IF OBJECT_ID('tempdb..#xml') IS NOT NULL DROP TABLE #xml
CREATE TABLE #xml ( yourXML XML )
GO

DECLARE @URL VARCHAR(8000) 

DECLARE @QS varchar(50)

-- & or ? depending if there are other query strings
-- Use this for when there is other query strings:
SELECT @QS = '&date='+convert(varchar(25),getdate(),126)
-- Use this for when there is NO other query strings:
-- SELECT @QS = '?date='+convert(varchar(25),126)
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?latlng=10.247087,-65.598409&sensor=false'  + @QS

DECLARE @Response varchar(8000)
DECLARE @XML xml
DECLARE @Obj int 
DECLARE @Result int 
DECLARE @HTTPStatus int 
DECLARE @ErrorMsg varchar(MAX)

EXEC @Result = sp_OACreate 'MSXML2.XMLHttp',@Obj OUT 

EXEC @Result = sp_OAMethod @Obj,'open',NULL,'GET',@URL,false
EXEC @Result = sp_OAMethod @Obj,'setRequestHeader','Content-Type','application/x-www-form-urlencoded'
EXEC @Result = sp_OAMethod @Obj,send,''
EXEC @Result = sp_OAGetProperty @Obj,'status',@HTTPStatus OUT 

INSERT #xml ( yourXML )
EXEC @Result = sp_OAGetProperty @Obj,'responseXML.xml'--,@Response OUT 

SELECT  yourXML.value('(//GeocodeResponse/status)[1]','VARCHAR(MAX)') from #xml

为了插入子字符串,您需要执行类似这样的操作以返回管道后的所有内容并添加到表中:

INSERT tableDestination (valueDestination)
SELECT  substring(yourXML.value('(//response/comment)[1]','VARCHAR(MAX)'),charindex('|',yourXML.value('(//response/comment)[1]',1)+1,len(yourXML.value('(//response/comment)','VARCHAR(MAX)'))) from #xml

.net – 如何使用LINQ to XML读取/写入加密的XML文件?

.net – 如何使用LINQ to XML读取/写入加密的XML文件?

我想使用LINQ to XML读/写加密的 XML文件.有谁知道如何使用.NET Framework内置的加密算法来加密XDocument对象使用的Stream?

我确实尝试过,但你不能将CryptoStream设置为读/写访问权限.它只支持Read或Write,这会导致LINQ to XML抛出异常.

更新:“动态”读取/写入文档会很好,但我只需要读取加密的xml文件,对其进行操作,然后再将其写回加密.

解决方法

最简单的方法可能是XDocument.Load(),Linq,然后是XDocument.Save().从快速测试应用程序(轻松使用非处置资源):

XDocument writeContacts = new XDocument(
   new XElement("contacts",new XElement("contact",new XElement("name","Patrick Hines"),new XElement("phone","206-555-0144",new XAttribute("type","home")),"425-555-0145","work")),new XElement("address",new XElement("street1","123 Main St"),new XElement("city","Mercer Island"),new XElement("state","WA"),new XElement("postal","68042")
         )
      )
   )
);

Rijndael RijndaelAlg = Rijndael.Create();

FileStream writeStream = File.Open("data.xml",FileMode.Create);
CryptoStream cStream = new CryptoStream(writeStream,RijndaelAlg.CreateEncryptor(RijndaelAlg.Key,RijndaelAlg.IV),CryptoStreamMode.Write);

StreamWriter writer = new StreamWriter(cStream);

writeContacts.Save(writer);

writer.Flush();
writer.Close();

FileStream readStream = File.OpenRead("data.xml");

cStream = new CryptoStream(readStream,RijndaelAlg.CreateDecryptor(RijndaelAlg.Key,CryptoStreamMode.Read);

XmlTextReader reader = new XmlTextReader(cStream);

XDocument readContacts = XDocument.Load(reader);

//manipulate with Linq and Save() when needed

将您最喜欢的ICryptoTransform交换到CryptoStream中.

c# – 如何从url读取csv文件?

c# – 如何从url读取csv文件?

我试图创建一个网页服务,获取一个URL,例如www.domain.co.uk/prices.csv然后读取csv文件.这是可能的吗?理想情况下没有下载csv文件?

解决方法

你可以使用:
public string GetCSV(string url)
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

    StreamReader sr = new StreamReader(resp.GetResponseStream());
    string results = sr.ReadToEnd();
    sr.Close();

    return results;
}

然后拆分它:

public static void SplitCSV()
{
    List<string> splitted = new List<string>();
    string fileList = getCSV("http://www.google.com");
    string[] tempStr;

    tempStr = fileList.Split(',');

    foreach (string item in tempStr)
    {
        if (!string.IsNullOrWhiteSpace(item))
        {
            splitted.Add(item);
        }
    }
}

虽然有很多的CSV解析器在那里,我建议不要滚动自己的. FileHelpers是一个很好的.

c# – 如何使用Web代理从Internet读取XML?

c# – 如何使用Web代理从Internet读取XML?

这是这个问题的后续行动:How to load XML into a DataTable?

我想将互联网上的XML文件读入DataTable. XML文件位于:http://rates.fxcm.com/RatesXML

如果我做:

public DataTable GetCurrentFxPrices(string url)
{
    WebProxy wp = new WebProxy("http://mywebproxy:8080", true);
    wp.Credentials = CredentialCache.DefaultCredentials;
    WebClient wc = new WebClient();
    wc.Proxy = wp;
    MemoryStream ms = new MemoryStream(wc.DownloadData(url));
    DataSet ds = new DataSet("fxPrices");
    ds.readxml(ms);
    DataTable dt = ds.Tables["Rate"];
    return dt;
}

它工作正常.我正在努力如何在Internet Explorer中使用默认代理集.我不想硬编码代理.如果在Internet Explorer中未指定代理,我还希望代码能够正常工作.

解决方法:

您可以使用Console.WriteLine(System.Net.WebProxy.GetDefaultProxy().Address.AbsoluteUri); …

C#中如何使用 XmlReader 读取XML文件

C#中如何使用 XmlReader 读取XML文件

XmlReader通过向前读取文档并识别读取到的元素,为我们提供了一种消耗资源最少的方式来解析XML数据。很多时候我们都是利用XmlReader来对XML文件的数据有效性进行验证(使用XmlReader实例的Read()方法依次读取所有节点,以此判断是否与符合指定的模式)。使用这种非缓存、只读、只向前的方式,每次读取只将很少的数据放入内存,对内存的占用量较小,对于读取内容较大的XML文件不失为一种最佳的选择。

让我们看看XmlReader类读取XML文件的步骤:

1、使用XmlReader类的Create()工厂方法创建该类的一个实例,并将被读取的XML文件名作为参数传入方法;

2、建立一个反复调用Read()方法的循环。这个方法从文件的第一个节点开始,然后读取所有余下的节点,但每次调用只读取一个节点。如果存在一个节点可被读取则返回True,而当到达文件最后时则返回False;

3、在这个循环中,将检查XmlReader实例的属性和方法,以获得关于当前节点的信息(节点的类型、名称、数据等)。不断执行循环直到Read()返回False;

下面首先看一个示例:

Employees.xml文件:

<?xml version='1.0'?>
<employees>
 <employee id="1"> 
 <name>
 <firstName>Nancy</firstName>
 <lastName>Davolio</lastName> 
 </name>
 <city>Seattle</city>
 <state>WA</state>
 <zipCode>98122</zipCode> 
 </employee>
 <employee id="2"> 
 <name>
 <firstName>Andrew</firstName>
 <lastName>Fuller</lastName>
 </name>
 <city>Tacoma</city>
 <state>WA</state>
 <zipCode>98401</zipCode> 
 </employee> 
</employees>

aspx代码:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Xml" %>
<script runat="server">
 void Page_Load(object sender,EventArgs e)
 {
 //Location of XML file
 string xmlFilePath = Server.MapPath("~/Employees.xml");
 try
 {
 using (XmlReader reader = XmlReader.Create(xmlFilePath))
 {
 string result;
 while (reader.Read())
 {
 //Process only the elements
 if (reader.NodeType == XmlNodeType.Element)
 {
 result = "";
 for (int count = 1; count <= reader.Depth; count++)
 {
 result += "===";
 }
 result += "=> " + reader.Name + "<br/>";
 lblResult.Text += result;
 }
 }
 }
 }
 catch (Exception ex)
 {
 lblResult.Text = "An Exception occurred: " + ex.Message;
 } 
 }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
 <title>Reading an XML File using XmlReader</title>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <asp:label id="lblResult" runat="server" />
 </div>
 </form>
</body>
</html>

输出结果:

=> employees
====> employee
=======> name
==========> firstName
==========> lastName
=======> city
=======> state
=======> zipCode
====> employee
=======> name
==========> firstName
==========> lastName
=======> city
=======> state
=======> zipCode

下面让我们看看XmlReader类的属性和方法:

属 性 说 明
AttributeCount 返回当前节点的属性个数
Depth 返回当前节点的深度,用于判断指定的节点是否具有子节点
EOF 判断读取器是否位于流的末端
HasAttribute 返回指示当前节点是否具有属性的布尔值
HasValue 返回指示当前节点是否具有值的布尔值
IsEmptyElement 判断当前节点是否是一个空元素
LocalName 返回当前节点的本地名称
Name 返回当前节点的限定名称
NamespaceURI 返回当前节点的命名空间URI
NodeType 以XmlNodeType枚举的形式返回当前节点的节点类型
Prefix 返回与当前节点相关的命名空间前缀
ReadState 以ReadState枚举的形式返回读取器的当前状态
Settings 返回用于创建XMLReader实例的XmlReaderSettings对象
Value 返回当前节点的值
ValueType 获得当前节点的CLR类型

XmlReader类的重要方法:

方 法 说 明
Close 通过将ReadState枚举设置为Closed来关闭Xmlreader对象
Create 创建XMLReader对象的实例并将其返回给调用程序
GetAttribute 获得属性的值
IsstartElement 指示当前节点是否是开始标签
MovetoAttribute 移动读取器到指定的属性
MovetoContent 如果当前节点不是内容节点,则移动读取器至下一个内容节点
MovetoElement 移动读取器至包含当前属性的元素;用于列举属性以及想切换至包含所有这些属性的元素
MovetoFirstAttribute 移动读取器至当前节点的第一个属性
MovetoNextAttribute 移动读取器至当前节点的下一个属性
Read 从流中读取下一个节点
ReadContentAs 读取提供类型的对象的内容
ReadElementContentAs 读取当前元素并返回指定类型对象的内容
ReadEndElement 移动读取器越过当前结束标签并移动到下一个节点
ReadInnerXml 以字符串的形式读取包括标记在内的当前节点所有内容
ReadOutXml 读取包括当前节点标记和子节点在内的节点的内容
ReadToDescendant 移动读取器至下一个匹配子孙元素的节点
ReadToFollowing 不断读取直至找到指定的元素
ReadToNextSlibing 移动读取器至下一个匹配兄弟元素的节点
ReadValueChunk 允许读取嵌入在XML文档中的大型文本流

XmlNodeType枚举的成员:

成 员 说 明
Attribute 属性
CDATA CDATA区域
Comment XML注释
Document 文档对象,表示XML树的根
DocumentFragment 文档片断
DocumentType 文档类型声明
Element,EndElement 开始元素和结束元素
Entity,EndEntity 开始实体声明和结束实体声明
EntityReference 实体引用(如<)
None 有没有读取节点而查询节点类型时使用
Notation DTD中的符号条目
ProcessingInstruction XML处理指令
SignificantWhitespace 在混合内容模型文档中的空白,或者设置了xml:space=preserve时使用
Text 元素的文本内容
Whitespace 标记之间的空白
XmlDeclaration 在文档顶部的XML声明

XmlReaderSettings类的重要属性:

属 性 说 明
CheckCharacters 允许你获得或者设置用于指示是否执行字符检查的值
ConformanceLevel 获得或设置XmlReader对象的符合要求
IgnoreComment 允许你获得或设置用于指示是否忽略注释的值
IgnoreProcessingInstruction 指定是否忽略处理指令
IgnoreWhitespace 指定是否忽略无意义的空格
ProhibitDtd 指定是否允许DTD处理
Schemas 指定在执行XML验证时使用的XmlSchemaSet
ValidationFlags 获得或者设置用于指定模式验证设置的值
ValidationType 获得或者设置用于指定所执行的验证类型的值
XmlResolver 设置用于访问外部文档的XmlReslover

通过XmlReaderSettings类,你可以指定一系列由XmlReader对象支持的功能,为此,只需将XmlReaderSettings作为参数传入XmlReader的Create()方法中即可。如下所示:

<script runat="server">
 void Page_Load(object sender,EventArgs e)
 {
 string xmlFilePath = Server.Mappath("~/Employees.xml"); 
 //Create the XmlReaderSettings object and set appropriate properties
 XmlReaderSettings settings = new XmlReaderSettings();
 settings.IgnoreComments = true;
 settings.IgnoreWhitespace = true;
 try
 {
 //Get reference to the XmlReader object
 using (XmlReader reader = XmlReader.Create(xmlFilePath,settings))
 {
 string result;
 while (reader.Read())
 {
 //Process only the elements
 if (reader.NodeType == XmlNodeType.Element)
 {
 //Reset the variable for a new element
 result = "";
 for (int count = 1; count <= reader.Depth; count++)
 {
 result += "===";
 }
 result += "=> " + reader.Name + "<br/>";
 lblResult.Text += result;
 }
 }
 }
 }
 catch (Exception ex)
 {
 lblResult.Text = "An Exception occurred: " + ex.Message;
 }
 }

</script>

总结下来,我们可以使用XmlReader类以非缓存、只读、只向前的方式读取XML文件,这种方法占用内存少,推荐大家使用。

关于如何使用T-SQL从URL读取XML?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.net – 如何使用LINQ to XML读取/写入加密的XML文件?、c# – 如何从url读取csv文件?、c# – 如何使用Web代理从Internet读取XML?、C#中如何使用 XmlReader 读取XML文件的相关知识,请在本站寻找。

本文标签: