我有这个包含实体列表的XML:
<?xml version="1.0" encoding="utf-8" ?>
<Connections>
<Connection>
<ConnectionName>connName</ConnectionName>
<InterfaceName>Account Lookup</InterfaceName>
<RequestFolder>C:\Documents and Settings\user\Desktop\Requests</RequestFolder>
<ResponseFolder>C:\Documents and Settings\user\Desktop\Responses</ResponseFolder>
</Connection>
</Connections>
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据其名称检索其中一个并从中构建一个对象.
var results = (from i in this.Elements("Connection")
where i.Element("ConnectionName").ToString() == stubConnectionName
select new {
interfaceName = ((string)i.Element("InterfaceName").Value),
requestFolder = ((string)i.Element("RequestFolder").Value),
responseFolder = ((string)i.Element("ResponseFolder").Value),
}).Single();
return new StubConnection(stubConnectionName, results.interfaceName, results.requestFolder, results.responseFolder);
Run Code Online (Sandbox Code Playgroud)
问题是结果是空的.我的查询有什么问题?
where i.Element("ConnectionName").ToString() == stubConnectionName
Run Code Online (Sandbox Code Playgroud)
必须:
where i.Element("ConnectionName").Value == stubConnectionName
Run Code Online (Sandbox Code Playgroud)
因为XElement.ToString返回<ConnectionName>connName</ConnectionName>包括XML标记,而XElement.Value只返回没有标记的封闭连接名称.
顺便说一句,您不必要地将所有值(已经是类型string)转换为string.你可以简化:
var results = (from i in this.Elements("Connection")
where i.Element("ConnectionName").Value == stubConnectionName
select new
{
interfaceName = i.Element("InterfaceName").Value,
requestFolder = i.Element("RequestFolder").Value,
responseFolder = i.Element("ResponseFolder").Value,
}).Single();
Run Code Online (Sandbox Code Playgroud)
您甚至可以更进一步直接选择并返回结果,而不使用之间的匿名类型:
return (from i in this.Elements("Connection")
where i.Element("ConnectionName").Value == stubConnectionName
select new StubConnection(stubConnectionName,
i.Element("InterfaceName").Value,
i.Element("RequestFolder").Value,
i.Element("ResponseFolder").Value)).Single();
Run Code Online (Sandbox Code Playgroud)
还请了解其中的差异
XElement.Value VS (string)XElement直接调用Value属性时要小心,因为如果元素不包含任何值,它将抛出异常. 如果您不确定它是否包含值,请将元素 (不是Value,但XElement直接)转换为字符串.如果没有,则返回null; 否则,结果是一样的.
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |