我有一个 SQL 表,其中有一个 varchar(8) 列,其中偶尔包含二进制数据。(0x01、0x02 等)。(无法更改列的格式或内容。)
当我进入 SQL Server 2005 Management Studio 并运行查询时:
select *
from mytable
where clientID = 431620
for xml auto
Run Code Online (Sandbox Code Playgroud)
我得到了有用的结果。注意 proc_counts 是如何编码的:
<mytable clientID="431620" recno="19014235" pdate="2008-03-04T00:00:00"
proc_counts="" otherstuff="foobar"
date="2008-02-17T00:00:00"/>
Run Code Online (Sandbox Code Playgroud)
完全有效的 XML,据我所知。现在,当我实际编写 C# 代码来读取这一行时,我在 ReadOuterXml 期间收到异常抛出:
SqlCommand cmd = new SqlCommand("select * from testing xml auto", connection);
using (XmlReader xrd = cmd.ExecuteXmlReader())
{
xrd.Read();
while (xrd.ReadState != ReadState.EndOfFile)
{
string s = xrd.ReadOuterXml();
records.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
这会抛出:XmlException 未处理。'',十六进制值 0x01 是无效字符。我想要上面的 XML,但是没有足够的 Google-fu …
我一直试图找到一种使用 XmlReader/XmlWriter 编写 XML 的简单方法。我真的不喜欢使用接口“IXmlSerializable”,但我对我的某些数据类别无选择。
无论如何,我想做的很简单:
private MyClass myObject;
public void WriteXml(XmlWriter writer)
{
writer.WriteObject(myObject); // <-- this method doesn't exists
}
Run Code Online (Sandbox Code Playgroud)
所以,我找到了 2 个解决方法:
我还没有测试第二个,但我认为它可能会起作用(不确定,因为 ReadValue 结果)。
那么我的问题是:我错过了什么重要的东西还是唯一的方法?或者有没有更好的方法来处理?
谢谢。
我想使用 XmlReader 读取项目中的 file.xml(我只想将其打包在我的 .exe 中)。当我从应用程序文件夹中读取文件时它可以工作,但我想从资源中读取它,这样我就可以在没有其他文件的情况下给出我的可执行文件。
我尝试了不同的方法,但没有一个起作用。我将 C# 与 WPF 3.0 一起使用。
你能帮助我吗?
我正在尝试从 xml 字符串中读取但是,
` XmlReader reader=XmlReader.Create(new StringReader(stringXml)`
Run Code Online (Sandbox Code Playgroud)
读者总是没有。为什么 reader objest none ?
为什么while循环没有返回任何东西?我认为这与.NET有关.我有.NET 2.0.问题是while语句将执行一次然后退出,就好像没有具有该名称的节点,当肯定存在时.
以下是XML的示例:
<rss version="2.0">
<channel>
<title>...</title>
<link>...</link>
<description>...</description>
<lastBuildDate>...</lastBuildDate>
<item>
<title>User greeting</title>
<guid>...</guid>
<link>http://...</link>
<description>Voicebox number: 1</description>
<author>Free Conference Call</author>
</item>
<item>
<title>User greeting</title>
<guid>...</guid>
<link>http://...</link>
<description>Voicebox number: 1</description>
<author>Free Conference Call</author>
</item>
</channel>
</rss>
Run Code Online (Sandbox Code Playgroud)
这是代码:
HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create (reqURL);
// Set some reasonable limits on resources used by this request
webreq.MaximumAutomaticRedirections = 4;
webreq.MaximumResponseHeadersLength = 4;
//====================
// Set credentials to use for this request.
webreq.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)webreq.GetResponse ();
//====================
// Get the …Run Code Online (Sandbox Code Playgroud) 有人可以向我解释这种行为吗?
如果您使用第一个字符串执行帖子底部的片段,它将返回与用于输入的字符串完全相同的字符串; 这就是我的预期.
输入1:
<?xml version='1.0' encoding='UTF-8'?>
<Company>
<Creator>Me</Creator>
<CreationDateTime>2010-01-25T21:58:32.493</CreationDateTime>
<Contacts>
<Contact>
<ContactID>365</ContactID>
</Contact>
</Contacts>
</Company>
Run Code Online (Sandbox Code Playgroud)
输出1:
<?xml version='1.0' encoding='UTF-8'?>
<Company>
<Creator>Me</Creator>
<CreationDateTime>2010-01-25T21:58:32.493</CreationDateTime>
<Contacts>
<Contact>
<ContactID>365</ContactID>
</Contact>
</Contacts>
</Company>
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用第二行(const string xml),这是相同的字符串,但在一行而不是两行,它返回以下
输入2
<?xml version='1.0' encoding='UTF-8'?>
<Company>
<Creator>Me</Creator>
<CreationDateTime>2010-01-25T21:58:32.493</CreationDateTime>
<Contacts>
<Contact>
<ContactID>365</ContactID>
</Contact>
</Contacts>
</Company>
Run Code Online (Sandbox Code Playgroud)
输出2
<?xml version='1.0' encoding='UTF-8'?>
<Creator>Me</Creator>2010-01-25T21:58:32.493
<Contacts>
<Contact>
<ContactID>365</ContactID>
</Contact>
</Contacts>
Run Code Online (Sandbox Code Playgroud)
2之间的唯一区别是第一个在xml声明之后有一个换行符,但是你可以看到第二个输出错过了Parent标签和第三个标签.任何想法?
这是我使用的代码:
public void XmlReader_Eats_Tags_IsTrue()
{
//this first xml declaration is on two lines - line break is right after the xml declaration …Run Code Online (Sandbox Code Playgroud) 我有一个大约12mb的XML文件,大约有16000个产品.我需要将它处理成一个数据库; 然而,在大约6000行时,它会因500错误而死亡.我正在使用Kohana框架(版本3),以防万一与它有任何关系.
这是我在控制器中的代码:
$xml = new XMLReader();
$xml->open("path/to/file.xml");
$doc = new DOMDocument;
// Skip ahead to the first <product>
while ($xml->read() && $xml->name !== 'product');
// Loop through <product>'s
while ($xml->name == 'product')
{
$node = simplexml_import_dom($doc->importNode($xml->expand(), true));
// 2 queries to database put here
$xml->next('product');
}
Run Code Online (Sandbox Code Playgroud)
XML是商店的一堆项目,因此两个查询是a)insert ignore商店本身和b)插入产品
任何见解将不胜感激.
我使用XmlReader读取xml-string代码:
XmlReader reader = XmlReader.Create(new StringReader(xmlString));
while (reader.Read())
{
// some code
}
Run Code Online (Sandbox Code Playgroud)
但是,如果xmlString等于""以后,我XmlException就reader.Read():根元素未找到.我怎么能检查XmlReader之前是否可以读取内容reader.Read()?
我从ARIN获得了这个XML响应:
<nets xmlns="http://www.arin.net/whoisrws/core/v1" xmlns:ns2="http://www.arin.net/whoisrws/rdns/v1" xmlns:ns3="http://www.arin.net/whoisrws/netref/v2" termsOfUse="https://www.arin.net/whois_tou.html">
<limitExceeded limit="256">false</limitExceeded>
<net termsOfUse="https://www.arin.net/whois_tou.html">
<registrationDate>2003-05-09T16:14:30-04:00</registrationDate>
<ref>http://whois.arin.net/rest/net/NET-216-113-160-0-1</ref>
<ns2:delegations termsOfUse="https://www.arin.net/whois_tou.html">
<ns2:delegationRef name="186.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/186.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="165.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/165.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="173.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/173.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="189.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/189.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="169.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/169.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="167.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/167.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="171.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/171.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="166.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/166.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="190.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/190.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="188.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/188.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="176.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/176.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="172.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/172.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="170.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/170.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="191.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/191.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="174.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/174.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="162.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/162.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="185.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/185.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="180.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/180.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="168.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/168.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="175.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/175.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="161.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/161.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="179.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/179.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="177.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/177.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="183.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/183.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="181.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/181.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="187.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/187.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="163.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/163.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="184.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/184.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="160.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/160.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="182.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/182.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="178.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/178.113.216.in-addr.arpa.</ns2:delegationRef>
<ns2:delegationRef name="164.113.216.in-addr.arpa.">http://whois.arin.net/rest/rdns/164.113.216.in-addr.arpa.</ns2:delegationRef>
</ns2:delegations>
<endAddress>216.113.191.255</endAddress> …Run Code Online (Sandbox Code Playgroud) 我试图获取节点的值,但它总是返回一个空字符串.据我所知,我必须首先访问节点才能读取它,但我还没有找到一个示例/语法来完成它.我的XMLNode名称是"BuyNowPrice",并且在我的XML文件中多次出现.
using (XmlReader xmlReader = XmlTextReader.Create(@"C:\benatia.xml"))
{
while (xmlReader.Read())
{
if (xmlReader.IsStartElement())
{
if (xmlReader.Name == "BuyNowPrice") Console.WriteLine(xmlReader.Name + ": " + xmlReader.Value);
}
}
}
Run Code Online (Sandbox Code Playgroud) xmlreader ×10
c# ×8
xml ×6
.net ×2
domdocument ×1
large-files ×1
memorystream ×1
php ×1
resources ×1
sql ×1
sql-server ×1
wpf ×1
xmlwriter ×1