我有一个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。
答案 0 :(得分:5)
如果myXel
已经是响应XElement
,那么它将是:
var status = myXel.Elements().Where(e => e.Name.LocalName == "Status").Single().Value;
您需要使用LocalName来忽略名称空间。
答案 1 :(得分:4)
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");
答案 2 :(得分:0)
一些TextReader知道很快就会有更多数据,但不是现在所有字符都可用。如果您要求输入10个字符,而现在只有4个字符,但是其他字符将在几秒钟后变为可用,那么最好返回4个可用字符,而不是等待所有10个字符。
一个示例可能是TextReader
,它缓冲来自串行端口的数据:等待所有请求的字符都可用将太慢,因此它将返回当前已经可用的所有字符。
您可以在返回值的说明中看到TextReader.Read(char[], int, int)
和TextReader.ReadBlock(char[], int, int)
之间的区别:
TextReader.Read
返回: 已读取的字符数;如果在流的末尾,则为0 并且没有读取任何数据。该数字将小于或等于count参数, 取决于数据流中是否可用。
TextReader.ReadBlock
返回: 已读取的字符数。该数字将小于或 等于计数,取决于是否已读取所有输入字符。
如果您要求TextReader
至Read
10个字符,如果读者认为等待所有10个字符是不明智的,则允许Read
返回少于10个字符。只要读者知道仍然有字符,它将等待至少一个字符。如果Read
返回读取的4个字节,则您不知道是否已读取最后一个字符。仅当Read
返回零时,您才知道不再需要阅读任何内容。这样,TextReader可以返回当前可用的字符,而不必等待所有10个字符都可用。
ReadBlock
将等待所有10个字节可用(或EOF)。因此,阅读速度较慢的读者可能会比预期所需的时间更长。
为确保已读取所有字符,请重复使用'Read repeatedly until you get a zero return; Use
ReadBlock`,直到读取的字节数少于要求的字节数为止。