VS 2010 - XML ReplaceChild Automatically Add Unwanted NameSpace Attribute
Apr 26, 2012
I am building a tool that takes an XML document and replaces XML nodes with a different XML node using .ReplaceChild. This all works great. The nodes get changed to the proper nodes. Where I seem to be having an issue is that the new node is inserted with an xmlns="" attribute, which I am not specifying for it to do, nor do I want as an attribute. How can I stop the ReplaceChild from inserting this as an attribute, or am I going to have to remove the attribute after the node is replaced?
Dim imgSrcNode As XmlElement = xmlDoc.CreateElement("img")
Dim imgSrcAttr As XmlAttribute = xmlDoc.CreateAttribute("src")
imgSrcAttr.InnerText = "./art/" + imageName.Substring(0, imageName.LastIndexOf("."))
imgSrcNode.Attributes.Append(imgSrcAttr)
mmlNode.ParentNode.ReplaceChild(imgSrcNode, mmlNode)
Resulting XML change:
<img src="./art/equJI161298_1" xmlns="" />
XML change desired:
<img src="./art/equJI161298_1" />
I need to read an xml document from a database record into an XDocument object in order for it to be deserialized. So that the deserialization will work, I need to apply a specific namespace to each of the level 1 elements. So XML looks a bit like this:
[Code]...
How do I prevent the blank/empty namespace being added to each child element of the element to which the required namespace has been applied?
I'm using VB 2008 and I'm trying to add a xmlns="mynamespace" attribute to an XDocument's root element.The XML document is created by a 3rd party, and I have loaded it into a VB XDocument object. As it comes, it has no namespaces. I have been working on a local copy and I added in a namespace in a text editor, so that I can use the XMLToSchema in VB to enable intellisense etc, as per the instructions in the Beth Massi vids at MSDN. Now the rest of the code works I want to open the live documents again. Without the namespace, my XML literals don't resolve.I've tried unsuccessfully to add in the XMLNS property to the root tag using a few methods, and the nearest I got was the following three code samples.
Dim myNS As XNamespace = "urn:nbf:namespacename" myXML.Element("nameofrootelement").Add(myNS)
^^^^ The namespace was added as the value of the root element, not as an attribute.
XML.Root.Add(New XAttribute("xmlns", "name"))
^^^^ Generated the error: Run-time exception thrown : System.Xml.XmlException - The prefix '' cannot be redefined from '' to 'name' within the same start element tag.
but
XML.Root.Add(New XAttribute("test", "name"))
^^^^ works correctly. Presumably it doesn't like me manually trying to set a reserved attribute? This namespacing seems way too over complex from some of the Googling I've done.I thought to .ToString it, then modify, then .Parse it also, but I wanted a better solution so that it would help me understand it a little better! I did try this though, and as you rightly point out, it affects all the descendants too, so thus it still breaks.
I will be working with multiple XML feeds all produced by different third parties, and I think for simplicity I will be leaving out the namespacing entirely!My own custom parsing function rewrites the third party feeds into one uniformed document, which then gets processed by another routine. I'll be able to add a ns to that intermediate piece of XML which will help when coding the secondary function.
If a node belongs to a namespace, it's children by default belong to the same namespace. So there's no need to provide an xmlns attribute on each child, which is good. However. If I create two nodes like this:
I've run across some VB.NET code that explicitly creates three GUID constants and uses them in a class's ComClass attribute. I've written COM-aware classes in the past just by checking the "Make COM-Visible" and "Register for COM interop" options in the project options. Is this explicit code simply unnecessary, or is it doing something above-and-beyond what those two options do? Here's a snippet:
<ComClass(MenuHandler.ClassId, MenuHandler.InterfaceId, MenuHandler.EventsId)> _ Public Class MenuHandler Public Const ClassId As String = "A2204623-A902-44d4-B524-FDFFCD176E53"
I am using Visual Studio 2008 and created an ASP.NET 3.5 project and solution. I added another project to my solution, a class library. I added a reference to my class library. Now when I click on the properties of my class library, the Default Namespace is set to "HRCommon", which is correct. Now for some reason, from my ASP.NET application, it's automatically importing the HRCommon namespace. So when I want to reference a class out of my class library, I just need to type the classname. I want to have to specify the whole name, like HRCommon.<ClassName> instead of just <ClassName>.
Everything works OK with my VB program except, all of a sudden now, whenever I attempt to brush across a text string with the cursor intending to hilite the string I get an error message saying "Microsoft Visual Basic 2010 Express has encountered a problem and needs to close."Where-upon VB shuts down and restarts.
I have a program that will round any numbers I give it regardless of the data type I set (I've tried double and decimal) before it saves into the DB. I'm using MS access for the DB and I've set the data types in access to Numeric Double, Numeric Decimal, and Currency and all with decimal places set to 4 -- all to no avail.
What I do know: 1) The textboxes on the form accept the number value as I enter it and after I hit save the value displayed is the same as the number that I entered. However, once I query the database again for that entry the value has been rounded up/down to the nearest integer (whole number). For example: I enter 1000.50 and hit save. I search for that same entry and the value is saved as 1000. If I enter 1000.51 and hit save then search for the entry it shows the value saved as 1001.
2) I can store the desired value directly into the DB by manually entering it. When I search for that entry from within the program it displays the correct amount. HOWEVER, if I try to change the amount and then hit save I get a concurrency violation.
I think that it may be a setting somewhere in the program that doesn't allow for decimal places but I've search everywhere and I cant find anything.
I am using XElement to manipulate my xml file: to find target node and then add child node to it. But now I have one problem. Let's say my xml file looks like this:
The second <ReportItem> is the newly-added one, but sadly this is not a valid file (my parser is complaining in the further processing of xml file). So how can I make this new item look exactly like the existing one, without any namespace? This has been driving me crazy. I spent a whole day to figure out that I need to add the curly brackets so that it will find the target node (it doesn't work like what the link above says that it adds and searches the default NS automatically), but now it adds something unnecessary?
I get an error when I try to build my project.'SSLAccessFiltercannot' be used as an attribute because it does not inherit from 'System.Attribute'. [code]
I've been linking to an external config file using <appSettings file="blah"> since VS 2003. I just created my first 2010 project, and I get no data from my file, nor any error. [edit]This functionality works as expected when I point to 3.5 framework.Another note, if I copy the other config to the debug directory and reference it by file name it works. When I use the UNC path it doesn't. The UNC path has worked for many of my past projects. Maybe it's a 4.0 security setting somewhere?
I have a userControl that I made, and it was placed on a form with other controls.On the form I pass the values from the other controls to a Function inside the userControl, this then takes the values passed in and the values on the userControl to make and return an object.
The Problem is that when it gets down to '.GameOppScore = OppScore' it decrements .GameScore by 1 and then decrements .GameOppScore by 1. It does nothing to the passed in values or the value in the input text box.
It just randomly decides to -1, I walked through the code while running and couldn't find a reason why it would do that.
I have a custom Attribute class where the constructor takes one fixed parameter and two optional parameters. It is my understanding that one can supply one or more optional parameters by using 'named parameters' such as this:
Private Sub CallMethod() Me.OptionalMethod(-1, z:=1) End Sub
[code]....
Well, I thought, perhaps Attributes don't support named parameters. I know they can behave a little weird (they don't support all types in their arguments for example I think), so I thought little of it.But then... I noticed something else. If you take a look at my code of the attribute class again. Notice that I am using an attribute on that class as well... And what do you know: named parameters. Working just fine... The AttributeUsage attribute has the exact same configuration: one fixed parameter and two optional parameters. I seem to be able to call them using named parameters just fine, where I cannot call my own attribute constructor with named parameters...
I have installed VB.NET express 2010 version and I am trying to create a new dll file for use in my SSIS packages. When I try to write the code, the VS environment tells me that I dont have the Microsoft.SqlServer.Dts.Runtime Namespace. What can I do to make this possible?
I looked around on internet but couldn't find anything substantial. I also have BIDS 2008 which I use to create packages. I cannot uninstall that because I have some work to do on a daily basis.
I'm having trouble with the code editor. I was exploring different functions and one of them that I clicked made the hidden code that VB uses to override to clean the form visible. This had lead to many issues. There is a partial class that is missing "end class" statement. When I put in the end class it makes nearly everything get a "not a valid namespace" error. I do not know how to fix this.
Code without endclass Private Sub frmMapReader_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
I have a list of objects, each object has a score attribute,The list of scores needs to be combined on the player ID to become a totaled score or series. My current thought process is to For Each through the list of individual games, and add the score attribute to a new list of scores with the same objects. So one list would be like:
clsGame(ID Number, Sore) dim ScoreList as list(of clsGames) ScoreList.Add(New clsGame(11, 244) ScoreList.Add(New clsGame(11, 333) ScoreList.Add(New clsGame(11, 444)
Then go through combining on like ID's to make a new list of games, that would actually be the series.
Dim SeriesList as new list(of clsClasses) For each game as clsGame in ScoreList 'cycle through the list of series seeing if an ID matches, if so add the score onto that ID Else
[code]....
Now I don't know how to add the player if its not in the seiries list without doing a heck of a lot more for each statements. If I add it after the end if then it will be added even if it is in the list..I tried playing around with List.Contains method, but I could only see if it contaned the exact same values i.e
SeiresList.Contains(game)
and because the scores are different (series vs single game) it wouldn't match, and I don't know how to see if it contains an object with just one of the attributes the same...
I have a webbrowser control with a static HTML page in it, i wanted to loop through each of the DIV items, and look at the class attribute within them. When i run my test, the class attribute is always blank? I know they have a class attribute i checked in my HTML
Is it possible to have multiple classes in a namespace and be able to reference the functions within the clases if the Major class is instaniatated from another class?? for instacnce:
Namespace Database Public Class Data Public Class Prepare
I have a problem in VS2010 with a user control i have created, I wonder if this is a known problem and if there is a resolution.
My project has a root namespace of DEV2.MyApp.I have created a user control and dragged it onto my form at design time.In the designer i get an error for that form that goes like this:-
Type DEV2.MyApp.myCtrl is not defined Me.myCtrl = New DEV2.MyApp.myCtrl ()I correct it by removing the namespace DEV2. like follows.Me.myCtrl = New MyApp.myCtrl ()
However, everytime i make an amendment to this form on the designer, the error creeps back. Its really annoying and I dont really want to resort to having to create the control at run time to get around it.
This class is located in the namespace Acme.Infrastructure.Interface.A class with the same name EventArgs exists in the System namespace.In another project in my solution I have a class Acme.BusinessModules.MyModule.MyClass.When attempting to use the EventArgs class I have to fully qualify the class name or the compiler thinks I am using the System.EventArgs class.My understanding of namespace resolution was that the compiler would first look for the class in the current namespace, and then its parents. It seems that the compiler checks in System before it checks in sibling namespaces. Is it correct that System is checked before the sibling? Or is this behaviour caused by other issues (Imports order?)?
When I'm coding in Visual Studio 2010, say that I have some interface: Namespace Some.Huge.Terrible.Namespace.Adhering.To.Company.Standards Public Interface MyInterface ... Property SomeThing as String ... End Interface End Namespace
And a class: Public Class CoolThings Implements MyInterface
When I hit Enter after MyInterface, Visual Studio will put Property SomeThing as String Implements Some.Huge.Terrible.Namespace.Adhering.To.Company.Standards.MyInterface.SomeThing
I would like it to, instead, simply put: Property SomeThing as String Implements MyInterface.SomeThing
It does the same thing for all methods, etc. that I have to implement and it's mildly annoying to either have to look at a stupidly long reference, or clean it all up since I'm importing the namespace at the top of my class anyway. Is there a setting in Visual Studio that I can use to switch that?
I'm trying to read a file line by line. Right now I have...
My.Computer.FileSystem.OpenTextFileReader(strList).ReadLine() But I keep pulling the first line, not the next line and so forth, anyone know how to do this? I want to stay with the My.Computer namespace because it is thread safe.
I have a WPF application that targets .NET 4.0. When the application starts the %ProgramData%Company NameApplicationVersion directory is created. It is an empty directory. I am not using My.Settings. Why is this directory created and how can I prevent it from being created?
I am trying to show the square root of the number entered in the textbox. when the user presses Q (Uppercase), the square Root should be shown (in the textbox). I did manage to get the sqaure root, but the problem is that when I press Q the Letter Q is also typed in. For example, if I enter 25 in the textbox and press Q then I get Q5 as the result. Is there any work around to this problem ? Below is the code that I have used.
Private Sub Textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If e.KeyChar = Chr(81) Then '81 for Letter Q Dim root As Double = Math.Sqrt(Val(TextBox1.Text))