|
you are perfectly right. the attribute is only changed in the new Xmlelement.
Therefore i tried to replace the new element with the old element, but then it says that the object is not referred to an instance ( null reference exception), although I defined both xmlelements
While xreader.Read()
Select Case xreader.NodeType
Case XmlNodeType.Element
xmlelement1 = xdoc.ReadNode(xreader)
xmlelement2 = xmlelement1
xmlelement2.SetAttribute("marked", 0)
xdoc.ParentNode.ReplaceChild(xmlelement2, xmlelement1)'null reference exception
Exit While
Case Else
End Select
End While
i cannot use methods like selectsinglenode and getelementsbytagname, cause I only have two tags "directory" and "file". My xml-document shall represent a filesystem. I think this would be too complicated then.
<?xml version="1.0" encoding="utf-8"?>
<directory Name="AAverschiebtest" marked="0" Path="D:\AAverschiebtest">
<file Name="Form1.resx" marked="0" Path="D:\AAverschiebtest\Form1.resx" />
<file Name="Form1.vb" marked="0" Path="D:\AAverschiebtest\Form1.vb" />
<file Name="log.txt" marked="0" Path="D:\AAverschiebtest\log.txt" />
<file Name="ordnerjpg.JPG" marked="0" Path="D:\AAverschiebtest\ordnerjpg.JPG" />
<file Name="testspeicherplatzarchivierung3.sln" marked="0" Path="D:\AAverschiebtest\testspeicherplatzarchivierung3.sln" />
<file Name="testspeicherplatzarchivierung3.suo" marked="0" Path="D:\AAverschiebtest\testspeicherplatzarchivierung3.suo" />
<file Name="testspeicherplatzarchivierung3.vbproj" marked="0" Path="D:\AAverschiebtest\testspeicherplatzarchivierung3.vbproj" />
<file Name="testspeicherplatzarchivierung3.vbproj.user" marked="0" Path="D:\AAverschiebtest\testspeicherplatzarchivierung3.vbproj.user" />
<directory Name="bilder" marked="0" Path="D:\AAverschiebtest\bilder">
<file Name="asdfasdfasdf.xml" marked="0" Path="D:\AAverschiebtest\bilder\asdfasdfasdf.xml" />
<file Name="buch1111.xml" marked="0" Path="D:\AAverschiebtest\bilder\buch1111.xml" />
......
.....
thanks for your help
|
|
|
|
|
Leia2011 wrote: then it says that the object is not referred to an instance ( null reference exception), although I defined both xmlelements
It's not the elements that cause the NullReferenceException . It's the call of ReplaceChild on the XmlDocument.ParentNode property. A document has no parent node, so this property returns null and trying to call a method on it will result in a NullReferenceException . Try calling ReplaceChild directly on the XmlDocument or the return value of the DocumentElement property.
Leia2011 wrote: i cannot use methods like selectsinglenode and getelementsbytagname, cause I only have two tags "directory" and "file". My xml-document shall represent a filesystem. I think this would be too complicated then.
The question that arises is whether you want to set the "marked" attribute to "0" only on elements that are direct children of a specific "directory" element or on all elements.?
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rick Cook www.troschuetz.de
|
|
|
|
|
thanks a lot for your help! it did indeed help me very much
I decided to convince me of xpath expressions finally
this is how I implemented it:
(this code sets the attribute of one marked element and all elements which are under it )
...
Dim xmlnode As XmlNode
Dim xmlelement As XmlElement
Dim xexpr As XPathExpression
...
Try
xexpr = XPathExpression.Compile("//directory[@Path=" & "'" & tpath & "\" & xnode.FullPath & "']")
xmlnode = xDoc.SelectSingleNode(xexpr.Expression)
'marked element
xmlelement = xmlnode
xmlelement.SetAttribute("marked", 1)
'files and directory under the marked element
For Each xmlelement In xmlnode
xmlelement.SetAttribute("marked", 1)
SetAttr(xmlelement, 1)
Next
xDoc.SelectSingleNode(xexpr.Expression).ParentNode.ReplaceChild(xmlnode, xDoc.SelectSingleNode(xexpr.Expression))
Catch ex As Exception
MsgBox(ex.Message)
Finally
xDoc.Save(filename)
End Try
|
|
|
|
|
I'm glad I could help. Your code looks quite good, but I think it could be simplified a bit. As far as I know the SelectSingleNode method creates no copy as the ReadNode method does, so there is no need to replace nodes and the following should work to:
Dim xmlnode As XmlNode
Dim xmlelement As XmlElement
...
Try
xmlnode = xDoc.SelectSingleNode("//directory[@Path=" & "'" & tpath & "\" & xnode.FullPath & "']")
'marked element
xmlelement = xmlnode
xmlelement.SetAttribute("marked", 1)
'files and directory under the marked element
For Each xmlelement In xmlnode
xmlelement.SetAttribute("marked", 1)
SetAttr(xmlelement, 1)
Next
Catch ex As Exception
MsgBox(ex.Message)
Finally
xDoc.Save(filename)
End Try
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rick Cook www.troschuetz.de
|
|
|
|
|
|
Hi all,
Three or four times a year i need to write an XPath statement. Every time I seem to have forgotten how to get it to work and every time i try to follow the examples on the internet , especially here and w3schools and everytime i still find it really hard to work out how to get my queries to work right.
What i find hardest is that I write syntactically valid xpath and just get back no records. I then don't know if i'm looking too high or low in the tree or if i got a typo etc.
Is there a more visual way of building XPath statements?
Thanks
Russell
|
|
|
|
|
|
Thanks,
In the end I realised I'd been slack and not defined a default namespace for the document while also relying on a webservice to cast from a string containing xml to an XMLDocument and .Net had kindly added a namespace for me.
That tool looks like it'll be very interesting in the near future, I seem to be descending into XML coding more and more having hovered around the edges of it for several years.
Thanks again,
Russell
|
|
|
|
|
Hi,
I have an XML file as input. I need to create another XML File by adding some data. I am using Biztalk to map them.
The input File looks like
<ns0:Root xmlns:ns0="http://Test_MBP.MBP">
<Record1>
<Field1>Record1FirstField1</Field1>
<Field2>Record1FirstField2</Field2>
<SeqField1>Record1FirstSeqField1</SeqField1>
<SeqField2>Record1FirstSeqField2</SeqField2>
<SeqField1>Record1SecondSeqField1</SeqField1>
<SeqField2>Record1SecondSeqField2</SeqField2>
</Record1>
<Record1>
<Field1>Record2FirstField1</Field1>
<Field2>Record2FirstField2</Field2>
<SeqField1>Record2FirstSeqField1</SeqField1>
<SeqField2>Record2FirstSeqField2</SeqField2>
<SeqField1>Record2SecondSeqField1</SeqField1>
<SeqField2>Record2SecondSeqField2</SeqField2>
<SeqField1>Record2ThirdSeqField1</SeqField1>
<SeqField2>Record2ThirdSeqField2</SeqField2>
</Record1>
</ns0:Root>
The output i recieved at the moment is as follows
<ns0:Root xmlns:ns0="http://Test_MBP.henryLM">
- <REC01>
- <Record1>
<const>01</const>
<Field1>Record1FirstField1</Field1>
<Field2>Record1FirstField2</Field2>
- <Rec02>
- <Record2>
<Field3>Record1FirstSeqField1</Field3>
<Field4><b>Record1FirstSeqField2</b></Field4>
<const>02</const>
</Record2>
- <Record2>
<Field3>Record1SecondSeqField1</Field3>
<Field4><b>Record1FirstSeqField2</b></Field4>
<const>02</const>
</Record2>
</Rec02>
</Record1>
- <Record1>
<const>01</const>
<Field1>Record2FirstField1</Field1>
<Field2>Record2FirstField2</Field2>
- <Rec02>
- <Record2>
<Field3>Record2FirstSeqField1</Field3>
<Field4>Record2FirstSeqField2</Field4>
<const>02</const>
</Record2>
- <Record2>
<Field3>Record2SecondSeqField1</Field3>
<Field4>Record2FirstSeqField2</Field4>
<const>02</const>
</Record2>
- <Record2>
<Field3>Record2ThirdSeqField1</Field3>
<Field4>Record2FirstSeqField2</Field4>
<const>02</const>
</Record2>
</Rec02>
</Record1>
</REC01>
</ns0:Root>
Some how i cant understand why biztalk gives the old values for "field4".
The structure required is correct but some how data is wrong for the node "Field4" in "record2" element.
can some help me out thanks............
|
|
|
|
|
I have downloaded from a website xml menu code.This includes a Horizantal menu and Vertical Menu of XML and XSL Files respectively. There is one Menu java script file and a Css file . The Download folder also includes code, default and help aspx files.How to display the XML menu . There is know html file loaded with all this files into it.
//Floder
Code.aspx
Default.aspx
Help.aspx
Menu.css
menu.js
vmenu.xml
vmenu.xsl
hmenu.xml
hmenu.xsl
Praveen
|
|
|
|
|
No html file needed, as the menus are probably used by the aspx files. Those are part of the ASP.NET technology and similar to php files allow you to create dynamic pages. Therefor they need to be processed by a special web server which then returns a html page to the client. Such a web server that allows you to run the aspx pages on your local systems is included in the free of charge Visual Web Developer 2005 Express Edition[^]
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rick Cook www.troschuetz.de
|
|
|
|
|
I trie to display a greeting Message in an html by redaing the words from xml.This was a my first simple progrma on xml.Use XMLDOM to load xml and xsl to memory.Transfomed into html. The html page dispplay only words of greeting.It doesn't display the text read from xml.
This my xsl code:
<body> words of greeting:
xsl:value-of select="greeting"
</body>
The Xml code
Hello world.
Praveen
|
|
|
|
|
You have to change your <'s to <'s and >'s to >'s. We can't see your XML text.
|
|
|
|
|
The Xsl stylesheet File used by xml to display html page
<small><?xml version="1.0"?><!--hellohtm.xsl-->
<html xmlns:xsl="http://www.w3.org/1999/xsl/transform" xsl:version="1.0">
<head><title>Greeting</title></head>
<body><p> words of greeting:<br/>
<b><i><u><xsl:value-of select="greeting"/></u></i></b>
</p>
</body>
</html></small>
The Xml file hodliing greeting message to be printed
<small><?xml version="1.0"?>
<?xml-stylesheet type="type/xsl" href="Hello.xsl"?>
<greeting>Hello world.</greeting></small>
The Html page should display the greeting message read from the xml file:" The page displays only the word of greeting on the page it must also display the xml greeting message Hello World."
<small><html>
<body>
<script language="javascript">
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("Hello.xml")
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("Hello.xsl")
document.write(xml.transformNode(xsl))
</script>
</body>
</html> </small>
Praveen
|
|
|
|
|
Excellent, that helps a lot. You have to divide the XML from the XSL. Here's what the XML should look like:
<?xml version="1.0" encoding="utf-8"?>
<greeting>Hello world.</greeting> And here's an example XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="greeting"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet> You had the XSL tags in the XML source document. The XML source document should be free-form, meaning that it can be pretty much anything as long as it's legal XML. The XSL is the transform and is pretty specific to the input and output expected. Check out zvon[^] or w3schools[^] for some tutorials on XSL.
|
|
|
|
|
Thanks, it is displaying
Praveen
|
|
|
|
|
Hi Guys
This a ticklish one and espite hunting around the web I cannot find an answer.
Basically what I would like to do is to extract a single instance of any node. For example imagine an XMl file which contains loads of books, authors and keywords for each book. What I would like to do is to extract a single intance of each author.
If you like you could call it an index.
any pointers would be immensley useful.
for the more SQL orientated the relevant code code would be select distinct author from books.
Thanks in advance
CQ
|
|
|
|
|
In this case, XSL is a little weak. There is a distinct-values[^] function in XPath 2. Microsoft doesn't like XPath 2 and has decided not to support it. You can use another parser like XmlSpy and it will work fine. If you're using an XSLT, you can do a sort on a for-each so you could get all the like author names together, but that's about it.
|
|
|
|
|
Hello,
This is my first delve into XML namespaces and I'm having a VERY difficult time parsing the XML because of the Namespace. If I remove the namespace then I get no problems. It would really be appreciated if anybody out there can cure my headache!
Here is my code:
Dim xmlDoc As New System.Xml.XmlDocument()
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
Dim datasource as XmlDataSource = new XmlDataSource()
resolver.Credentials = New NetworkCredential("username", "password")
xmlDoc.XmlResolver = resolver
xmlDoc.Load("http://somedomain.com/webservicename")
Dim xsn as XmlNamespaceManager = new XmlNamespaceManager(xmlDoc.NameTable)
xsn.AddNamespace("t", "urn:ahw:itemlist")
xmlData.Document = xmlDoc
xmlData.TransformSource = "test.xsl"
Here is the XML:
<?xml version="1.0" encoding="UTF-8"?>
<itemlist xmlns="urn:ahw:itemlist">
<item name="Photos" friendly-name="Photos" />
<item name="Videos" friendly-name="Videos" />
<item name="OtherMedia" friendly-name="Other Media" />
</item-type-list>
Here is the xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="itemlist">
<TABLE BORDER="2">
<TR>
<TD>Display Name</TD>
<TD>Name</TD>
</TR>
<xsl:for-each select="item">
<TR>
<TD><xsl:value-of select="@friendly-name"/></TD>
<TD><xsl:value-of select="@name"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>
Here is my asp.net page (the main part where I want the XML to display):
<form runat="server">
<asp:Xml ID="xmlData" runat="server"/>
</form>
Thanks so much for your time!
Chris
|
|
|
|
|
Well, first I gotta ask if there's a typo in your input XML. The end tag for the document element doesn't match. The next thing I'd like to know is what is the error you're getting? Do you get the error when you load the document, when you put it in the data document, or when you run the transform?
|
|
|
|
|
Sorry. Here is the correct XML:
<?xml version="1.0" encoding="UTF-8"?>
<itemlist xmlns="urn:ahw:itemlist">
<item name="Photos" friendly-name="Photos" />
<item name="Videos" friendly-name="Videos" />
<item name="OtherMedia" friendly-name="Other Media" />
</itemlist>
I'm not getting an error. Its just nothing appears on page.
|
|
|
|
|
Try putting two slashes before itemlist: <xsl:template match="//itemlist">
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rick Cook www.troschuetz.de
|
|
|
|
|
sorry but that had no impact.
Thanks for the quick replies!
|
|
|
|
|
I got it working now!!!
Heres is what I needed to change in the XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="urn:ahw:itemlist"
exclude-result-prefixes="t">
<xsl:template match="t:itemlist">
<TABLE BORDER="2">
<TR>
<TD>Display Name</TD>
<TD>Name</TD>
</TR>
<xsl:for-each select="t:item">
<TR>
<TD><xsl:value-of select="@friendly-name"/></TD>
<TD><xsl:value-of select="@name"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>
|
|
|
|
|
Ah the namespace. Of course. Should have seen that
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rick Cook www.troschuetz.de
|
|
|
|