1

次のxmlを次のように考えてみましょう

<?xml version="1.0" encoding="UTF-8" ?>
   <response success="true">
       <struct>value</struct>
   </response>

解析中に次のエラーが発生します

Root element is missing.

私が使用したコードは

foreach (XElement carselement in xdoc.Descendants("response"))
                {
                  String  value= carselement.Element("struct").Value;

                }

あなたの解決策を待っています

4

2 に答える 2

1

XML 入力が期待どおりではなく (「空」)、例外がXDocument.Load(またはXDocument.Parseなど) の実行中に発生します。

最終的に期待されるものが含まれてxdoc いません - そして「疑わしい」行は決して実行されません。繰り返しますが、この例外は、XML が列挙/ナビゲートされたときではなく、XML が解析されたときに発生します。このシナリオは、付属のデバッガーまたはスタック トレースで簡単に識別できます。

C# ステートメントとして LINQPad で実行できる最小限のコードを次に示します。ダンプでうまく表示されるように修正しました。期待どおりに実行されることに注意してください。

var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
   <response success=""true"">
       <struct>value</struct>
   </response>";
var xdoc = XDocument.Parse(xmlStr);
xdoc.Descendants("response")
    .Select(e => e.Element("struct").Value)
    .Dump();

例外が発生する可能性Descendantsがある方法は次のとおりです (他の列挙/ナビゲーションとは関係ありません)。

var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>";
var xdoc = XDocument.Parse(xmlStr);
// --> XmlException: Root element is missing
于 2013-06-21T17:54:31.690 に答える
0

XML が単純化しすぎて、次のようになっている可能性があります。

<!-- example -->
<?xml version="1.0" encoding="UTF-8" ?>
<response success="true">
    <struct>value1</struct>
</response>
<response success="true">
    <struct>value2</struct>
</response>
<response success="false">
    <struct>value3</struct>
</response>

この場合、要素の配列<responses></responses>をラップする a がありません。response

ところで、XML ファイルが実際にここで引用したものである場合、コードも機能するはずです。XMLも操作しようとしていますか?

XDocument xdoc = XDocument.Load(filePath);
if (xdoc == null) return;

XElement response = xdoc.Descendants("response").FirstOrDefault();
XElement structElement = response.Descendants("struct").FirstOrDefault();
于 2013-06-21T17:43:42.697 に答える