运算符 'Like' 没有为类型 'System.Xml.Linq.XName' 和 'String' 定义

Operator 'Like' is not defined for types 'System.Xml.Linq.XName' and 'String'

我需要检索像“*-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>

此查询失败... 运算符 'Like' 没有为类型 'System.Xml.Linq.XName' 和 'String' 定义。

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

好的,那么我怎样才能检索所有元素名称,如“*-Font”。

您似乎想使用 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