LINQ To XML Syntax For XML Element With Attributes?
May 13, 2009
I'm a bit of a LINQ newbie and I was having some trouble with the following. I'm trying to perform a query using LINQ on an XML file and store the results in a list of DataClass objects that match the XML.I've got an XML file that is defined like this:
I have created a Data class to support this XML format. What I would like to do is create a LINQ Query to grab these 3 records and store them into a List of my DataClass. In order to support multiple Order elements, I have my class defined with a generic list of "Order" structs... It looks like this:
Public Class ASNData
Private _field As String
Private _value As String[code].....
how to grab the 3 order elements and store them into my list of Order structs.
I need Xpath of the "element" in above XML using VB.Net NameSpace Manager For the "body" node i have done and its working but i couldnt do the same to "element":
dim bodynode as XMLNode=XML.SelectSingleNode(//ns:body,nsmngr)
where "nsmngr" is the namespacemanger created by me and "ns" is the name space of the "parent node" (which the "body" node inherits) added to the namespace manager as "ns"
VB.NET allows you to set optional parameters like this to avoid order restrictions (which is lovely) but in this case it's forcing you to that.For example this is not possible:
<TestAttr("a", "abc", "foo", 3)>
even though the parameters are in the same order as the original definition.
I am building the 'TheBeerHouse' project in vb.net (the book is written in C#). Once I understand the concepts, I can usually convert it to vb. However, there are a few areas that give my some problems (which I will address individually). The first issue I have is the C# 'base' to VB 'MyBase'. [code] My understanding of this conversion is that I need to grab the attributes of the <articles> element under the <theBeerHouse> custom section in the web.config file.This code does not compile and the get the following error: 'MyBase' must be followed by '.' and an identifier.
I'm trying to learn LINQ and have a question on querying XML using VB. My XML: <Procedure-Text> <A ID="marker1"></A>Do This Procedure </Procedure-Text> <Procedure-Text> <A ID="marker2"></A>Do That Procedure </Procedure-Text> How can I specify my query to get only the procedure text that has the ID attribute marker2? In other words, I would like a resulting string that says Do That Procedure.
My issue is with getting the attribute values. I tried this: For Each xattr As XAttribute In attr cboBrandChoice.Items.Add(test.Value) Next
However, I keep getting the following error: {"Unable to cast object of type '<GetAttributes>d__8' to type 'System.Xml.Linq.XAttribute'."} I'm new to using Linq so this error isn't making a whole lot of sense to me.
First, I am making the assumption that anything you can do in "Attribute Syntax" (AS), you can do in "Property Element Syntax" (PES), but not vice-versa. That is the reason I intend on coding completely in PES if possible. I have encountered quirks though.The first issue is regarding AS "x:Name" or PES "<FrameworkElement.Name>": If I use PES, I must make sure it is the last element, otherwise any PES below it will error on build; eg "Value of type 'System.Windows.ResourceDictionary' cannot be converted to 'Namespace.ClassName'."
A problem encountered intermixing AS and PES: Set "x:Name" and "MinWidth" as AS. Set "Title" as PES.
I would like the following function to return Nothing if the element with the specified key is not in the collection. Instead, it returns an error - something to the effect of "no element found"
Public Class MyCollection Inherits System.Collections.ObjectModel.Collection(Of MyType) Public Function FindByActivityKey(ByVal searchValue As Integer) As MyType
The XML sample below has two records and each record has three similar Nodes (<datafield tag="500" >) What I want to accomplish is get the value of the second Node <datafield tag = "5000">. The fallowing code I gets the value for all three nodes but I want something like get elementat(1). I tried this but it didn't worked MsgBox(xEle.Elements.ElementAt(1).Value)
Code:
Dim xd As XDocument = XDocument.Load("C:UsersstopeteDesktopMarc_convertxml.xml") If xd IsNot Nothing Then Dim datafields = From datafield In xd.Descendants("datafield")
I'm adding an element to existing XML doc with the following code:
Dim theXMLSource As String = Server.MapPath("~/Demo/") & "LabDemo.xml" Dim nodeElement As XElement Dim attrAndValue As XElement = _
[code]....
It makes error like this:
System.NullReferenceException: Object reference not set to an instance of an object.Object reference not set to an instance of an object.Error line: nodeElement.Add(New XElement(attrAndValue))
Please excuse my stupidity, I tend to find the traversing XML overly complicated.
[Code]...
Once it gets to staffBio I get an error saying "Object reference not set to an instance of an object." obviously because that node does not exist. My question is how can I assign the value to a variable even when it is empty without having to do a conditional check before each assignment?
I'm editing XML element with the following XML: <?xml version="1.0" encoding="utf-8"?> <!--Test XML with LINQ to XML--> <LabSerivceInfo><LabService> <ServiceType>Copy</ServiceType> <Price>1</Price></LabService> [Code] ..... How to update the ServiceType and Price where ServiceType = varServiceType?
Using VB.NET (3.5), i have an ArrayList of Employees. I'm trying to build an XML representation (to feed another system) and one of the fields is a simple incrementing ID, starting at 1.[code]...
Using the XML elements below, I am trying to locate all table elements where they have a column@Name equal to a specific item such as "email" and return the Database@Location and Table@Name. My LINQ statement returns the proper table@name but for each element found returns the first database@Location for both. So my question is, how can I search for a column@Name and return the proper Database@Location and Table@Name [Code]
I'm trying to update an element in the XML document below:
Here's the code:
Dim xmldoc As XDocument = XDocument.Load(theXMLSource1) Dim ql As XElement = (From ls In xmldoc.Elements("LabService") _ Where CType(ls.Element("ServiceType"), String).Equals("Scan") _
[code]....
But, I got this error message:
Object reference not set to an instance of an object.Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.Error line:ql.SetValue("23")
It has two records and each record has three similar Nodes (<datafield tag="500">). What I want to accomplish is get the value of the second Node <datafield tag = "5000">. The following code I gets the value for all three nodes but I want something like get elementat(1).I tried this but it didn't worked.
MsgBox(xEle.Elements.ElementAt(1).Value) Dim xd As XDocument = XDocument.Load("C:UsersstopeteDesktopMarc_conv ertxml.xml") If xd IsNot Nothing Then Dim datafields = From datafield In xd.Descendants("datafield") Where (datafield.Attribute("tag").Value = "500")
I am trying to write a LINQ query which will return true if there are multiple objects which have a property with the same value.
Here is what I have come up with so far:
Formatters.Where(Function(f As DataModel.Formatter) _ Formatters.Select(Function(f2 As DataModel.Formatter) f2.Name.ToLower()).Contains(f.Name.ToLower())).Count > 1
However the above always returns true as long as their are more then 1 elements in the list?
I have a generic list - SupportedTypeGroups. Each SupportedTypeGroup has SupportedTypes property (generic list of SupportedType). How to construct a Linq query to locate SupportedType with required name?
I am using linq to fill a gridview with the information from an xml from code behind. I would like to order my Grid according to one of my elements in the xml ("value element").
gvResourceEditor.DataSource = (From resElem In resourceElements.Elements("data") _ Select New With { _ .Key = resElem.Attribute("name").Value, _ .Value = HttpUtility.HtmlEncode(resElem.Element("value").Value), _ .Comment = If(resElem.Element("comment") IsNot Nothing, HttpUtility.HtmlEncode(resElem.Element("comment").Value), String.Empty) _ }).OrderBy(?????)
I am new in LINQ world.I need an urgent help in reading the xml elements using LINQ with specific where condition.I need to find the max air_temp for a county i.e where county name = "Boone" and hour id = "06/03/2009 09:00CDT".[code]
I cannot find a way to get LINQ to spit out xml the way they want. Question is, can LINQ do it or do I need to resort to hardcoding the xml the old way before LINQ to XML?
After I have programmed several projects in VB.Net I to my surprise discovered that there are some more than subtle differences between C# and VB.NET LINQ usage.For example, if we want to group elements by multiple properties (columns) we need to create a new anonymous type explicitly:
var procs = from c in Process.GetProcesses() group c by new {c.BasePriority, c.Id} into d select d;
whereas in VB.NET more straightforward syntax will already do:
Dim b = From c In Process.GetProcesses() Group c By c.BasePriority, c.Id Into Group Select Group
So, one does not need to create a type with "new" here. What are the other differences? good comparison between the LINQ syntax in C# and VB.NET?
What I really want is to select these two tables in to an anon type like in Scott Gu's blog: here However, I would settle for this created type "ActiveLots" I am joining two tables together and want to be able to reference columns from each in my result set. [code]...