3

次のように構築された Web API のコントローラーから XML 文字列を受信して​​います。

private string CreateXDoc(IEnumerable<PassedJSONConverted> passed)
    {
        XNamespace xmlns = "http://host.adp.com";

        var doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));

        var jobListElement = new XElement(xmlns + "JobXML");

        foreach (var objectItem in passed)
        {
            var loopElement = new XElement(xmlns + "JobsXML", new XElement(xmlns + "ID", objectItem.ID.ToString()), new XElement(xmlns + "Name", objectItem.Name), new XElement(xmlns + "Age", objectItem.Age.ToString()), new XElement(xmlns + "JobTitle", objectItem.JobTitle), new XElement(xmlns + "StartDate", objectItem.StartDate));

            jobListElement.Add(loopElement);
        }

        doc.Add(jobListElement);

        //Format without \n's
        return doc.ToString(SaveOptions.DisableFormatting);
    }

これで問題なく、XML は次のように設定されます。

- <JobXML xmlns="http://host.xxx.com">
 - <JobsXML>
    <ID>1</ID> 
    <Name>Dave</Name> 
    <Age>23</Age> 
    <JobTitle>Developer</JobTitle> 
    <StartDate>10/24/2013 6:40:28 AM</StartDate> 
  </JobsXML>
- <JobsXML>
    <ID>2</ID> 
    <Name>John</Name> 
    <Age>44</Age> 
    <JobTitle>QA</JobTitle> 
    <StartDate>10/24/2013 6:40:28 AM</StartDate> 
  </JobsXML>
- <JobsXML>
    <ID>3</ID> 
    <Name>Dave</Name> 
    <Age>23</Age> 
    <JobTitle>Senior Developer</JobTitle> 
    <StartDate>10/24/2013 6:40:28 AM</StartDate> 
  </JobsXML>
 </JobXML>

次に、これを文字列として返し、次のように解析して xDoc に戻そうとします。

private static string HandleResponse(HttpWebResponse httpResponse)
    {
        using (var responseReader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8))

        {
            string responsePayload = responseReader.ReadToEnd();

            var newxDoc = XDocument.Parse(responsePayload);

            return responsePayload;
        }
    }

実行時の文字列「responsePayLoad」は次のように設定されます。

 "<JobXML xmlns=\"http://host.adp.com\"><JobsXML><ID>1</ID><Name>Dave</Name><Age>23</Age><JobTitle>Developer</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML><JobsXML><ID>2</ID><Name>John</Name><Age>44</Age><JobTitle>QA</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML><JobsXML><ID>3</ID><Name>Dave</Name><Age>23</Age><JobTitle>Senior Developer</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML></JobXML>"

これにより、次の「newxDoc」オブジェクトで例外が発生します。

XmlException は処理されません。ルート レベルのデータは無効です。行 1、位置 1。

誰が私が間違っているのか教えてもらえますか?

4

4 に答える 4

0

あなたが尋ねたように、XML文字列を解析して xdocument :

このコードを試してみてください

 XDocument document = XDocument.Parse(xml);

しかし、これが10万行を超えるコードを持つxmlなどの巨大なxml文字列に適しているかどうかは懸念があります。10000 行のコードを含む xml ドキュメントに対してこのメ​​ソッドを試しましたが、1.5 秒かかりました

于 2013-11-02T00:18:27.517 に答える
0

上記の2つの回答を組み合わせると、それが整理されます

XMLスクリプトを繰り返したときに、このエラーが発生しました

XML 解析エラー: 整形式ではありません 場所: Untitled-1.xml 行番号 2、列 15: http://host.adp.com\">1Dave23 --------------^開発者10/24/2013 6:45:22 AM2John44QA10/24/2013 6:45:22 AM3Dave23上級開発者10/24/2013 6:45:22 AM

これが正しい形です

<?xml version="1.0" encoding="utf-8"?>
<JobXML xmlns="http://host.adp.com\"><JobsXML><ID>1</ID><Name>Dave</Name><Age>23</Age><JobTitle>Developer</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML><JobsXML><ID>2</ID><Name>John</Name><Age>44</Age><JobTitle>QA</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML><JobsXML><ID>3</ID><Name>Dave</Name><Age>23</Age><JobTitle>Senior Developer</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML></JobXML>
于 2013-11-01T13:52:17.733 に答える