使用Linq到XML相当新,并且在这一项上绞尽脑汁。我使用Xdocument创建XML文档,方法是从数据库中获取一些数据,然后对每个语句使用a,然后添加每一行数据,即
Dim MyCustomers As IQueryable(Of Customer) = GetCUstomers
Dim XDoc As XDocument = <?xml version="1.0" encoding="UTF-8" standalone="yes"?<Customers></Customers>
For Each c As Customer In MyCustomers
Xdoc.Root.Add(<CustomerID=<%= c.Id %>
<FirstName><%= c.Name %></FirstName>
<Surname><%= c.Surname %></Surname>
Next我想要一个If状态,所以如果姓氏是空的,我希望这个元素被完全删除。
因此,如果客户的姓氏存在,XML是
<CustomerID=123>
<FirstName>Name</FirstName>
<Surname>Surname></Surname>如果不是
<CustomerID=123>
<FirstName>Name</FirstName>我试过用
<%= If (string.IsnullEmpty(c.Surname) Then %>以及其他的组合,但是无论我尝试什么,我都会得到一个语法错误。我搜索了MSDN,大多数示例都提到了获取节点,但没有根据条件在XML文件中创建节点/元素。我真的迷失在如何接近这一个?
有人能帮忙吗?
发布于 2014-06-05 18:04:58
我认为可能有些代码被弄错了--有一些无效的XML元素,比如<CustomerID=123>,可能应该是<Customer ID=123>。尽管如此,我认为,下面的代码(在LINQPad中运行)可以实现您想要的结果,希望您可以将其修改为您的代码。
Sub Main
Dim MyCustomers = New List(Of Customer)() From {
New Customer() With { .ID = 1, .Name = "Cust1", .Surname = "Surn1" },
New Customer() With { .ID = 2, .Name = "Cust2" },
New Customer() With { .ID = 3, .Name = "Cust3", .Surname = "Surn3" },
New Customer() With { .ID = 4, .Name = "Cust4" }
}
Dim Xdoc = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customers></Customers>
For Each c As Customer In MyCustomers
Dim cust =
<Customer ID=<%= c.Id %>>
<FirstName><%= c.Name %></FirstName>
</Customer>
If c.Surname IsNot Nothing Then
cust.Add(<Surname><%= c.Surname %></Surname>)
End If
Xdoc.Root.Add(cust)
Next
Xdoc.Dump()
End Sub
' Define other methods and classes here
Public Class Customer
Public Property ID As Integer
Public Property Name As String
Public Property Surname As String
End Class更新
下面是上面的循环,但是使用嵌入式LINQ查询来有选择地添加<Surname>元素。就我个人而言,我发现上面的逻辑更具可读性,但两者产生的输出是相同的。
For Each c As Customer In MyCustomers
Xdoc.Root.Add(
<Customer ID=<%= c.Id %>>
<FirstName><%= c.Name %></FirstName>
<%= From sn In New String() { c.Surname }
Where sn IsNot Nothing
Select <Surname><%= sn %></Surname>
%>
</Customer>
)
Next这是输出:
<Customers>
<Customer ID="1">
<FirstName>Cust1</FirstName>
<Surname>Surn1</Surname>
</Customer>
<Customer ID="2">
<FirstName>Cust2</FirstName>
</Customer>
<Customer ID="3">
<FirstName>Cust3</FirstName>
<Surname>Surn3</Surname>
</Customer>
<Customer ID="4">
<FirstName>Cust4</FirstName>
</Customer>
</Customers>https://stackoverflow.com/questions/24064606
复制相似问题