Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#xmlreader处理包含嵌套xml的xml?_C#_Xml - Fatal编程技术网

如何使用c#xmlreader处理包含嵌套xml的xml?

如何使用c#xmlreader处理包含嵌套xml的xml?,c#,xml,C#,Xml,我正在使用c#与一个具有公开restapi的数据库进行交互。我感兴趣的表包含论坛帖子,其中一些帖子本身包含xml 每当我的结果集包含包含xml的帖子时,我的应用程序就会抛出一个错误,如下所示: 异常详细信息:System.Xml.XmlException:“>”是意外标记。所需的标记为“”或“”。第1行,位置62 这是一条失败的路线: 第44行:ds.ReadXml(xmlData) 这是我正在使用的代码: var webClient = new WebClient();

我正在使用c#与一个具有公开restapi的数据库进行交互。我感兴趣的表包含论坛帖子,其中一些帖子本身包含xml

每当我的结果集包含包含xml的帖子时,我的应用程序就会抛出一个错误,如下所示:

异常详细信息:System.Xml.XmlException:“>”是意外标记。所需的标记为“”或“”。第1行,位置62

这是一条失败的路线:

第44行:ds.ReadXml(xmlData)

这是我正在使用的代码:

        var webClient = new WebClient();

        string searchString = searchValue.Text;

        string requestUrl = "http://myserver/restapi.ashx/search.xml?pagesize=4&pageindex=0&query=";
        requestUrl += searchString;

        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ProhibitDtd = false;


        XmlReader xmlData = XmlReader.Create(webClient.OpenRead(requestUrl),settings);

        DataSet ds = new DataSet();
        ds.ReadXml(xmlData);
        Repeater1.DataSource = ds.Tables[1];
        Repeater1.DataBind();
这是它阻塞的XML记录类型(节点中的内容导致了问题):


994
帮助文件:它们是用什么编写的?
http://myserver/linktest.aspx
2008-10-16T16:18:00+01:00发布时间
当这个xml被激发到CRM时,它创建了13条空记录,有人能看到这个xml有什么明显的错误吗?

?xml version=“1.0”encoding=“UTF-8”?soap:Envelope xmlns:typens=”“soap:encodingStyle=”“xmlns:xsi=”“xmlns:soapenc=”“xmlns:wsdlns=”“xmlns:xsd=“xsi:type=”xsd:long”18208442035524/sessionId/SessionHeader/soap:Headersoap:Bodytypens:addentityname xsi:type=“xsd:string”lead/entitynamecords xsi:nil=“true”xsi:type=“typens:ewarebase”/status xsi:type=“xsd:string”预注册/statusrequester xsi:type=“xsd:string”Mimnagh/requestersonfirstname xsi:type=“xsd:string”Sean/personfirstnamepersonlastname xsi:type=“xsd:string”Test2/personlastnamepersonsalutation xsi:type=“xsd:string”Mr/personsalutationdetails xsi:type=“xsd:string”测试项目详细信息/details描述xsi:type=“xsd:string”测试描述详细信息/descriptioncomments建议xsi:type=“xsd:string”测试项目注释/CommentsPersonMail xsi:type=“xsd:string”smimnagh@mac.com/PersonMailPersonPhoneNumber xsi:type=“xsd:string”12334566777/PersonPhoneNumber类型xsi:type=“xsd:string”PreReg/typecompanyname xsi:type=“xsd:string”站点客户端/companyname/typens:add/soap:Body/soap:信封

非常感谢

xml 2010-07-08T11:53:46.848+01:00
我可以用xmlreader做些什么来让它忽略导致问题的原因吗

请注意,我不能在使用XML之前更改它-因此,如果它的格式不正确,那么我想知道是否有一种方法可以忽略或修改该特定记录而不产生错误


谢谢!

看起来您的某些引用需要在某些元素的内容中转义。请尝试使用

"
用于不包装属性值的引号

更新:

因为您想要读取的数据并不是严格意义上的XML(它几乎是XML),所以最好是

  • 你或你的老板(如果你有)会对第三方大喊大叫,因为他们没有向你发送格式良好的XML
  • 执行一些可怕的黑客操作,尝试将可能得到的任何内容转换为XML
  • 如果你必须看第2点,我脑海中浮现的最简单的事情就是读取“XML”中的字符,这些字符在尖括号内或尖括号外。如果你找到任何“字符,而你不在任何尖括号内,请将“替换为”


    但请注意,这样做是万不得已的。

    您的
    标记的内容格式不正确。XML对数据的语法要求非常严格。要么在XML中嵌入CDATA节,要么正确转义字符串。

    我无法控制XML,因为它来自第三方应用程序。因此我需要一些方法在它的畸形状态下处理它。
    "
    
    "