标签: xmlreader

SQL 表上的 XML 读取器返回无效 XML

我有一个 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="&#x1;&#x1;&#x2;&#x1;" 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 …

c# xml sql sql-server xmlreader

2
推荐指数
1
解决办法
5625
查看次数

如何使用 XmlWriter/XmlReader 读/写复杂对象

我一直试图找到一种使用 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 个解决方法:

  1. 编写我自己的例程来手动编写我的对象。相当可笑,因为 .Net 已经做到了。
  2. 使用 StringWriter 创建一个新的序列化程序并使用 WriteValue(string) 方法。

我还没有测试第二个,但我认为它可能会起作用(不确定,因为 ReadValue 结果)。

那么我的问题是:我错过了什么重要的东西还是唯一的方法?或者有没有更好的方法来处理?

谢谢。

c# serialization xmlwriter xmlreader

2
推荐指数
1
解决办法
4648
查看次数

如何通过 xmlreader 从资源中读取 xml?

我想使用 XmlReader 读取项目中的 file.xml(我只想将其打包在我的 .exe 中)。当我从应用程序文件夹中读取文件时它可以工作,但我想从资源中读取它,这样我就可以在没有其他文件的情况下给出我的可执行文件。

我尝试了不同的方法,但没有一个起作用。我将 C# 与 WPF 3.0 一起使用。

你能帮助我吗?

c# xml wpf resources xmlreader

2
推荐指数
1
解决办法
8235
查看次数

xmlreader.Create 返回无

我正在尝试从 xml 字符串中读取但是,

 ` XmlReader reader=XmlReader.Create(new StringReader(stringXml)`  
Run Code Online (Sandbox Code Playgroud)

读者总是没有。为什么 reader objest none ?

xmlreader

2
推荐指数
1
解决办法
8158
查看次数

这段代码出了什么问题

为什么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)

.net c# xmlreader

1
推荐指数
1
解决办法
444
查看次数

XmlReader和MemoryStream,返回的xml未命中标记

有人可以向我解释这种行为吗?

如果您使用第一个字符串执行帖子底部的片段,它将返回与用于输入的字符串完全相同的字符串; 这就是我的预期.

输入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)

c# xml memorystream xmlreader

1
推荐指数
1
解决办法
7383
查看次数

如何将XMLReader/DOMDocument与大型XML文件一起使用并防止500错误

我有一个大约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)插入产品

任何见解将不胜感激.

php xml xmlreader domdocument large-files

1
推荐指数
1
解决办法
6271
查看次数

如何在调用Read()之前检查XmlReader是否可以读取内容?

我使用XmlReader读取xml-string代码:

  XmlReader reader = XmlReader.Create(new StringReader(xmlString));      
  while (reader.Read())
  {
    // some code
  }
Run Code Online (Sandbox Code Playgroud)

但是,如果xmlString等于""以后,我XmlExceptionreader.Read():根元素未找到.我怎么能检查XmlReader之前是否可以读取内容reader.Read()

.net c# xml xmlreader

1
推荐指数
1
解决办法
701
查看次数

使用C#解析XML

我从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)

c# xmlreader

1
推荐指数
1
解决办法
1336
查看次数

使用XMLTextReader读取节点值

我试图获取节点的值,但它总是返回一个空字符串.据我所知,我必须首先访问节点才能读取它,但我还没有找到一个示例/语法来完成它.我的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)

c# xml xmlreader

1
推荐指数
1
解决办法
3034
查看次数