|
hello every one I am tried to update an XML file but its not working according to my requirement. I have to create a new child node <screensupportitem> below the parent node <supportitems> with matching condition --where attribute of <screensupportitem> e.g <refid> is equal to 3 (comes from query string). Also new <screensupportitem> child have different attributes except <refid>. So I have to create a <screensupportitem> with setting new values of all the attributes.
This is the structure of XML file
-----------------------------------------------------------------
<screenstosupport>
<screentosupport>
........all have same structure <screentosupport>
<screentosupport>
<screenuniqueid>c1f13323-209b-4b0e-ad8d-d34f64d34c28
<supportitems>
<linkurl>C:\Documents and Settings\Login Subhash\Desktop\iframe.html
<linktext>New Link Help
<screensupportitem>
<linkdate>2007-10-25T11:47:10.515625+05:30
<linkauthor>SUBHASH\Login Subhash
<linkurl>C:\Documents and Settings\Login Subhash\Desktop\main.html
<linktext>Adding New Html Help
<optionalsupportinstruction>
<refid>3
<fieldstosupport>
<linkurl>C:\Documents and Settings\Login Subhash\Desktop\iframe.html
<linktext>New Link Help
<screentosupport>
........all have same structure <screentosupport>
And this is my sample code
-----------------------------------------------------------------
strXMLFile = strAlbumPath + "\\" + strAlbumName + ".linkinfo.xml";
XmlDocument doc = new XmlDocument();
doc.Load(strXMLFile);
FileStream findata = new FileStream(strXMLFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
objDataSet.ReadXml(findata);
findata.Close();
//int intRefId = Convert.ToInt32(Request.QueryString["RefId"]);
int intRefId = 3;
string strFilePath = FileUpload.PostedFile.FileName;
string strXPath = "/LinkInformation/ScreensToSupport/ScreenToSupport/SupportItems/ScreenSupportItem[RefId='" + intRefId + "']";
XmlNode newParent = doc.SelectSingleNode(strXPath);//.ParentNode.NextSibling.ChildNodes;
XmlNode newRootParent = doc.SelectSingleNode(strXPath).ParentNode;
XmlNode newScreenToSupport = newParent.Clone();
newRootParent.InsertAfter(newRootParent, newScreenToSupport);
doc.Save(strXMLFile);
-----------------------------------------------------------------
It giving error 'ERROR:Cannot insert a node or any ancestor of that node as a child of itself.'
I am very new in xml please help me to solved my problem. I will very thankful for your valuable cooperation.
Please reply me soon....
|
|
|
|
|
Vishnu Narayan Mishra wrote: newRootParent.InsertAfter(newRootParent, newScreenToSupport);
As the error message explains, you are adding a node as a child of itself here. Read the MSDN documentation[^] on this method if you are unsure how to use it.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
am writing an app that uses the .Net classes TCPClient and NetworkStream to read and write data between 2 machines. All works fine.
I have recently found a need to be able to send Http 1.1 with a SOAP message as the Http body. Currently i am using an XmlDocument to load and parse the SOAP data. However to do this i first have to read in the HTTP header, search for the beginning of the body and construct my own XmlDocument.
There must be a better way. I don't want to call a web service, i just want to send http with a soap body and receive the same.
I am looking for a means of loading in the NetworkStream into some kind of HTTP object to read the http stuff and also load the body into some simple Soap object that can be used to pull out/ set values.
Comments, Suggestions Welcomed.
Carl
|
|
|
|
|
Please don't double post.
Choose the most appropriate forum for your question and ask there only.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
Hi everyone,
Im a newbie in xml, anyone could help to resolve my problem?
I have one xml file and i was able to fill my two datagrid (grdColor and grdSize) using my PO.xml data.Now, my problem is i would like to filter my data in grdSize depending to the data in the grdColor.Like for example, in the grdColor i have two rows, the first row has a ColorID: 1 and the second row is ColorID:2, now , when the mouse cursor pointing to the first row which ColorID is 1 in grdSize it only appear thus data that has ColorID:1.
Thanks in advance.
try and try until you success..
|
|
|
|
|
kurt19 wrote: I have one xml file and i was able to fill my two datagrid (grdColor and grdSize) using my PO.xml data.
Ummm..... how?
|
|
|
|
|
that's my problem right now. Hope someone can help me this problem.
try and try until you success..
|
|
|
|
|
It appears you are not having a problem with XML but with an ASP.NET Datagrid.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
My problem is I could not filter the data appears in my second datagrid. Because when i load my xml file it will simply populate the two datagrid. My first datagrid is consist of Parent nodes while my second datagrid are the child nodes.
What i want to do is when i load the xml file the first datagrid will display all data while the display data in the second datagrid depends on the first grid.HOw could I filter the data in the second grid?
try and try until you success..
|
|
|
|
|
I can think of two ways of filtering your data. First, you can filter the child XML document based on the parent XML document using XSLT, and binding the resulting XML document to the child Datagrid. Second, you can place both XML documents in the same Dataset into their corresponding Datatables. You create a DataRelation and a DataView to achieve your desired results.
You can find articles on Code Project to get you started or you can Google for more resources and examples.
George
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
Hi george,
Thanks, but I have only one XML file. How could I manipulate this kind of proble. Can you give me an example code that related to my problem.
Thanks in advance.
Regards,
kurt
try and try until you success..
|
|
|
|
|
As I said, your problem is with DataGrids. This is the XML/XSL forum. In your case, your XML document is just a data source and you want to display it in a certain way. I guess you want a Master-Detail type report. So, look on Code Project and Google for your example code. I gave you keys to help your search.
Also, if using a DataGrid is to complicated for you. You know you can create your own table and post it to the ASP.NET page.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
Hi,
I had created an XML file with Unicode (encoding UTF-8) using Word 2007; the problem is when I try to view it in IE through an XSL result in the following error:
An invalid character was found in text content...
I changed the encoding of XML file to “ISO-8859-1” – able to view in IE but the characters get messed.
Please Help.
Hariharan C
|
|
|
|
|
Hariharan2105 wrote: I changed the encoding of XML file to “ISO-8859-1”
ummm.... how?
|
|
|
|
|
Hi,
did you try to set the output of your sxl file to utf-8 or iso-8859-1?
example:
<xsl:output method="xml" encoding="iso-8859-1" indent="yes" />
otherwise, some more information might be needed to know where the encoding gets messed up.
|
|
|
|
|
Hi,
I tried the following in XML
<code><?xml version="1.0" encoding="UTF-8" standalone="no"?></code>
And the following in XSD
<code><xsl:output method="html" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/></code>
thanks,.
Hariharan C.
|
|
|
|
|
here is a dummy example I made to show the principle.
neither dtd nor schema is provided and the xsl is
connected in the xml to allow you to open the xml in
ie and see the resulting (minimalistic) web page.
rem: the location of my xsl file is hard coded in
C:\Temp\
both files are saved on disk in utf-8
txt.xml:
<?xml version="1.0" encoding="UTF-8"?&ft;
<?xml-stylesheet type="text/xsl" href="C:\Temp\dummy.xsl"?>
<bla>üöä</bla>
dummy.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="iso-8859-1" indent="yes" omit-xml-declaration="yes" media-type="text/html"/>
<xsl:template match="bla">
<html>
<body>
<xsl:value-of select="."/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
hope this helps
Erik
|
|
|
|
|
Thanks Erik,
I tried this too, resulting two junk characters instead of Unicode character. Do I need to install any fonts for this?
Regards,
Hariharan C.
|
|
|
|
|
you have to take care that the files saved on disk are saved in utf-8 format and not in ansi
(most text editors will allow you to change)
Erik
|
|
|
|
|
Sometimes when you save a Unicode document, it places a couple of extra bytes at the beginning of the XML file. I usually delete those bytes, and everything seems to work after that.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
I am using the SQLXML managed classes to generate some XML from a SQL Server database, specifying a reference to an XSL stylesheet for my SqlXmlCommand object to transform the raw XML returned from the database. My stylesheet is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Root">
<xsl:element name="ParameterTemplates">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="Root/*">
<xsl:element name="ParameterTemplate">
<xsl:for-each select="@*">
<xsl:element name="Parameter">
<xsl:attribute name="Name"><xsl:value-of select="name()"/></xsl:attribute>
<xsl:attribute name="Value"><xsl:value-of select="."/></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
I have added the attribute indent="yes" to my <xsl:output> element which has the effect of formatting the output with line feeds. This is fine, however I would like to "prettily" indent the output in a similar manner to that which can be produced using the XmlTextWriter. What is the best way of achieving this? Can I modify my stylesheet to indent the nodes? Or would I have to perform some post-processing of the output in my .NET code to achieve this, perhaps using a combination of an XmlTextReader and XmlTextWriter?
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
-- modified at 18:05 Thursday 1st November, 2007
|
|
|
|
|
pmarfleet wrote: Can I modify my stylesheet to indent the nodes?
Yes and no. To indent the XML output you can assign yes to the indent attribute of the output element but the XSLT standard does not define that a processor has to adhere and how the XML output has to be indented. (XSLT: "If the indent attribute has the value yes, then the xml output method may output whitespace in addition to the whitespace in the result tree"). Probably the XML processor of the SQLXML processor does ignore this attribute or maybe you have to tell him explicitly which number of whitespaces he should use for indentation. Personally I never used those classes so I cannot tell what to do. Have a look if there might be a setting for this. Also it could be helpful if you post the code you've got so far, making it easier for us to help you.
"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
|
|
|
|
|
My .NET code is as follows:
public static string ExecuteQueryAndTransform(string connectionString, string queryText, string xslPath)
{
string result = String.Empty;
SqlXmlCommand cmd = new SqlXmlCommand(connectionString);
cmd.XslPath = xslPath;
cmd.RootTag = "Root";
cmd.CommandText = queryText;
using (Stream strm = cmd.ExecuteStream())
{
using (StreamReader sr = new StreamReader(strm))
{
result = sr.ReadToEnd();
}
}
return result;
}
There doesn't appear to be any way to control the indenting from the SQLXML managed classes, so I assume this would be done through the stylesheet.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
I found the answer to my problem. If I perform the transform using the .NET framework classes instead of the SQLXML managed classes, I can use the XmlTextWriter to control the indentation.
public static string ExecuteQueryAndTransform(string connectionString, string queryText, string xslPath)
{
string result = String.Empty;
SqlXmlCommand cmd = new SqlXmlCommand(connectionString);
if (!queryText.EndsWith("For XML Auto", StringComparison.CurrentCultureIgnoreCase))
{
queryText += " For XML Auto";
}
cmd.RootTag = "Root";
cmd.CommandText = queryText;
using (Stream strm = cmd.ExecuteStream())
{
XmlTextReader reader = new XmlTextReader(strm);
XPathDocument xd = new XPathDocument(reader, XmlSpace.Preserve);
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xslPath);
StringWriter stringWriter = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(stringWriter);
writer.Formatting = Formatting.Indented;
writer.Indentation = 3;
writer.IndentChar = ' ';
xslt.Transform(xd, null, writer);
result = stringWriter.ToString();
}
}
Thanks for your help anyway.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
I am using xsl:apply-templates and between result of every template i want to insert comma(",") so my code for the same is as below:
<xsl:apply-templates>
<xsl:with-param name="test" >,</xsl:with-param>
</xsl:apply-templates>
but above code is not working,please help me..
Thanks in advance.
Sushant Mathur
Bangalore,
INDIA.
http://n.domaindlx.com/fun2ssh/HOME.htm
|
|
|
|