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已经是响应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 个字符可用,但其他字符将在几秒钟后变为可用,那么返回 4 个可用字符而不是等待所有 10 个字符可能更明智。

一个例子可能是TextReader来自串行端口的缓冲数据:等待所有请求的字符都可用会太慢,因此它将返回所有现在已经可用的字符。

在返回值的描述中可以看到TextReader.Read(char[], int, int)和的区别:TextReader.ReadBlock(char[], int, int)

TextReader.Read

返回:已读取的字符数,如果在流的末尾并且没有读取数据,则返回 0。该数字将小于或等于 count 参数,具体取决于数据在流中是否可用。

TextReader.ReadBlock

返回:已读取的字符数。该数字将小于或等于 count,具体取决于是否已读取所有输入字符。

如果您要求 aTextReaderRead10 个字符,Read如果读者认为等待所有 10 个字符不明智,则允许返回少于 10 个字符。只要读者知道还有字符,它就会等待至少一个字符。如果Read返回读取了 4 个字节,那么您不知道是否已读取最后一个字符。只有当Read返回零时,你才知道没有什么可读的了。这允许 TextReader 返回当前可用的字符,而无需等待所有 10 个字符都可用。

ReadBlock将等到所有 10 个字节都可用(或 EOF)。因此,阅读速度慢的读者可能会比您希望的更长的时间阻止您的过程。

为确保您已读取所有字符,请repeatedly until you get a zero return; Use重复使用“Read ReadBlock”,直到您读取的字节数少于请求的字节数。

于 2019-05-21T09:30:20.570 回答