7

このようXElementな内容の があります。

<Response xmlns="someurl" xmlnsLi="thew3url">
   <ErrorCode></ErrorCode>
   <Status>Success</Status>
   <Result>
       <Manufacturer>
            <ManufacturerID>46</ManufacturerID>
            <ManufacturerName>APPLE</ManufacturerName>
       </Manufacturer>
      //More Manufacturer Elements like above here
   </Result>
</Response>

Status要素内の値を読み取るにはどうすればよいですか?

私は試し XElement stats = myXel.Descendants("Status").SingleOrDefault(); ましたが、それはnullを返しています。

4

3 に答える 3

6

myXelすでに Response である場合は、次のXElementようになります。

var status = myXel.Elements().Where(e => e.Name.LocalName == "Status").Single().Value;

名前空間を無視するには、LocalName を使用する必要があります。

于 2012-06-01T05:26:19.813 に答える
5
XElement response = XElement.Load("file.xml"); // XElement.Parse(stringWithXmlGoesHere)
XNamespace df = response.Name.Namespace;
XElement status = response.Element(df + "Status");

Status子要素にアクセスするには十分です。その要素の値を文字列として必要な場合は、次のようにします。

string status = (string)response.Element(df + "Status");
于 2012-06-01T09:48:07.120 に答える
0

一部の TextReader は、すぐにより多くのデータが追加されることを知っていますが、すべての文字が現在利用できるわけではありません。10 文字を要求し、現在は 4 文字しか使用できないが、他の文字は数秒で使用可能になる場合、10 文字すべてを待つのではなく、使用可能な 4 文字を返す方が賢明かもしれません。

例としてはTextReader、シリアル ポートからデータをバッファリングする場合があります。要求されたすべての文字が使用可能になるまで待機するには遅すぎるため、現在既に使用可能なすべての文字が返されます。

戻り値の説明でTextReader.Read(char[], int, int)との違いを確認できます。TextReader.ReadBlock(char[], int, int)

TextReader.Read

戻り値: 読み取られた文字数、またはストリームの最後でデータが読み取られなかった場合は 0。データがストリーム内で使用可能かどうかに応じて、数値は count パラメーター以下になります。

TextReader.ReadBlock

戻り値: 読み取られた文字数。すべての入力文字が読み取られたかどうかに応じて、数値は count 以下になります。

10文字TextReaderまでお願いする場合は、10文字すべてを待つのは賢明ではないと読者が判断した場合、10文字未満で返すことができます。リーダーがまだ文字があることを認識している限り、少なくとも 1 文字待機します。4 バイトが読み取られたことが返された場合、最後の文字が読み取られたかどうかはわかりません。ゼロが返された場合にのみ、もう読み取るものがないことがわかります。これにより、TextReader は、10 文字すべてが使用可能になるまで待たずに、現在使用可能な文字を返すことができます。ReadReadReadRead

ReadBlock10 バイトすべてが使用可能 (または EOF) になるまで待機します。そのため、読み込みが遅いと、プロセスが必要以上に長くブロックされる可能性があります。

すべての文字を読み取ったことを確認するには、要求されたバイト数よりも少ないバイト数を読み取るまで、'Read repeatedly until you get a zero return; UseReadBlock' を繰り返し使用します。

于 2019-05-21T09:30:20.570 に答える