运营商&喜欢'未定义类型&System; .Xml.Linq.XName'和' String'

时间:2015-07-30 22:40:12

标签: vb.net linq-to-xml operators

我需要检索这样的元素名称" * - Font"然后检索属性值。

这是使用的linq ......

Dim categories = From dc as xelement In Xml.DescendantsAndSelf("defaults") _
let Id = lw.name _
Where Id = "*-Font" _
let FontFamily = lw.attribute("font-family").value _
let FontSize = lw.attribute("font-size").value _
Select Id, FontFamily, FontSize

这是xml示例......

<defaults>
    <scaling>1</scaling>
    <page-layout>2</page-layout>
    <system-layout>3</system-layout>
    <appearance>4</appearance>
    <default-font font-family="Arial" font-size="20.4"/>
    <word-font font-family="Times New Roman" font-size="10.2"/>
</defaults>

此查询失败,显示... 运营商&喜欢&#39;未定义类型&System; .Xml.Linq.XName&#39;和&#39; String&#39;。

我已经进行了网络搜索,没有找到Linq to xml和Like运算符。

好的,那么如何检索所有元素名称,如&#34; * - 字体&#34;。

1 个答案:

答案 0 :(得分:3)

看起来您想使用lw.Name.LocalName.EndsWith("-font"),但您的LINQ查询有dclw ...并且似乎无法编译。以下是我认为您正在寻找的完整示例:

Dim xml =
<defaults>
    <scaling>1</scaling>
    <page-layout>2</page-layout>
    <system-layout>3</system-layout>
    <appearance>4</appearance>
    <default-font font-family="Arial" font-size="20.4"/>
    <word-font font-family="Times New Roman" font-size="10.2"/>
</defaults>

Dim categories =
    From e In xml.Elements()
    Let Id = e.Name.LocalName
    Where Id.EndsWith("-font")
    Let FontFamily = e.Attribute("font-family").Value
    Let FontSize = e.Attribute("font-size").Value
    Select Id, FontFamily, FontSize

这导致:

Id              FontFamily        FontSize
--              ----------        --------
default-font    Arial             20.4
word-font       Times New Roman   10.2

修改

this question所示,您可以将XML文字用于连字符属性(我最初无法解决这个问题,因为@font-family不起作用):

Dim categories =
    From e In xml.Elements()
    Let Id = e.Name.LocalName
    Where Id.EndsWith("-font")
    Let FontFamily = e.@<font-family>
    Let FontSize = e.@<font-size>
    Select Id, FontFamily, FontSize