|
I have proposed this XML format for a blog system:
<pre><?xml version="1.0" encoding="utf-8" ?>
<posts>
<post id="0" date="03/02/1983 13:23:32">
<name>eggie5</name>
<email>eggie5@gmail.com</email>
<website>http://www.alexegg.com</website>
<title>First Entry</title>
<message><![CDATA[this is a message!]]></message>
<comment id="0" date="03/02/1983 13:23:32">
<name>Dquan</name>
<email>dquan@hiphop.com</email>
<website>http://www.alexegg.com</website>
<title>Re: First Entry</title>
<message><![CDATA[this is reply to your message!]]></message>
<type>response</type>
<comment id="1" date="03/02/1983 13:23:32">
<name>asdf</name>
<email>asdf@hiphasdfop.com</email>
<website>http://www.asdf.com</website>
<title>Re: Re: First Entry</title>
<message><![CDATA[this is reply to your comment on the message!]]></message>
<type>respones to comment</type>
</comment>
</comment>
</post>
<post id="1" date="03/02/1983 13:23:32">
<name>caguirre</name>
<email>eggie5@gmail.com</email>
<website>http://www.alexegg.com</website>
<title>Broken speaker on my SLVR</title>
<message><![CDATA[The speaker on my moto slvr is broken and all weird!]]></message>
<comment id="0" date="03/02/1983 13:23:32">
<name>Alex Egg</name>
<email>eggie5@alexegg.com</email>
<website>http://www.alex.com</website>
<title>Re: Broken speaker on my SLVR</title>
<message><![CDATA[mine, is broke too, I don't konw what to do. What did you do?]]></message>
<type>response</type>
</comment>
</post>
<post id="2" date="03/02/1983 13:23:32">
<name>alex egg</name>
<email>eggie5@gmail.com</email>
<website>http://www.alexegg.com</website>
<title>the story of the curious oyster</title>
<message><![CDATA[this is a message!]]></message>
</post>
</posts></pre>
Each post node is top level message, then under each post is a 1 or more comment nodes can appear and under each of those comments nodes more comment nodes can appear. It's very hierarchical and perfect for XML.
So currently I'm doing and XSL transform on this XML to turn it into HTML, but right now I'm only supporting the first level of comments, not any sub comments:
<pre><?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ul class="posts">
<xsl:for-each select="posts/post">
<li class="post">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p>
<xsl:value-of select="message" />
</p>
<ul class="comments">
<xsl:for-each select="comment">
<li class="comment">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p>
<xsl:value-of select="message" />
</p>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet></pre>
Anyways, I'm not sure how I should go about processing the comments. I can't keep hard coding for-each's in the XSL because who knows how many levels of comments there are. I'm thinking I need some kind of recursive XSL action to go through all the various comments and comments of comments.
Can anybody help me out?
/\ |_ E X E GG
|
|
|
|
|
I don't understand why.... but somehow this works:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ul class="posts">
<xsl:for-each select="posts/post">
<li class="post">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p>
<xsl:value-of select="message" />
</p>
<xsl:call-template name="GetComments" />
</li>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="GetComments">
<xsl:param name="count" select="2"/>
<xsl:if test="comment">
<ul class="comments">
<xsl:for-each select="comment">
<li class="comment">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p>
<xsl:value-of select="message" />
</p>
</li>
<xsl:call-template name="GetComments">
<xsl:with-param name="count" />
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
/\ |_ E X E GG
|
|
|
|
|
XSLT is recursive. I hope the following is helpful:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/posts">
<html>
<head>
<title>Usage of Templates</title>
</head>
<body>
<ul class="posts">
<xsl:apply-templates select="post"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="post">
<li class="post">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p><xsl:value-of select="message" /></p>
<xsl:if test="comment">
<ul class="comment">
<xsl:apply-templates select="descendant-or-self::comment"/>
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template match="comment">
<li class="comment">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p><xsl:value-of select="message" /></p>
</li>
</xsl:template>
</xsl:stylesheet>
"We make a living by what we get, we make a life by what we give." --Winston Churchill
-- modified at 19:37 Thursday 12th April, 2007
|
|
|
|
|
Hi,
I've chosen to use this xml structure instead, it seems more logical and flexable:
<?xml version="1.0" encoding="utf-8" ?>
<posts>
<post id="0" date="03/02/1983 13:23:32">
<name>eggie5</name>
<email>eggie5@gmail.com</email>
<website>http://www.alexegg.com</website>
<title>First Entry</title>
<message><![CDATA[this is a message!]]></message>
<tags>
<tag>general</tag>
</tags>
<post id="0" date="03/02/1983 13:23:32">
<name>Dquan</name>
<email>dquan@hiphop.com</email>
<website>http://www.alexegg.com</website>
<title>Re: First Entry</title>
<message><![CDATA[this is reply to your message!]]></message>
<type>response</type>
<post id="1" date="03/02/1983 13:23:32">
<name>asdf</name>
<email>asdf@hiphasdfop.com</email>
<website>http://www.asdf.com</website>
<title>Re: Re: First Entry</title>
<message><![CDATA[this is reply to your comment on the message!]]></message>
<type>respones to comment</type>
<post id="1" date="03/02/1983 13:23:32">
<name>asdf</name>
<email>asdf@hiphasdfop.com</email>
<website>http://www.asdf.com</website>
<title>Re: Re: Re: First Entry</title>
<message><![CDATA[This is another reply to your comment that was a reply to the first comment!!!]]></message>
<type>respones to comment</type>
</post>
</post>
</post>
</post>
<post id="1" date="03/02/1983 13:23:32">
<name>caguirre</name>
<email>eggie5@gmail.com</email>
<website>http://www.alexegg.com</website>
<title>Broken speaker on my SLVR</title>
<message><![CDATA[The speaker on my moto slvr is broken and all weird!]]></message>
<post id="0" date="03/02/1983 13:23:32">
<name>Alex Egg</name>
<email>eggie5@alexegg.com</email>
<website>http://www.alex.com</website>
<title>Re: Broken speaker on my SLVR</title>
<message><![CDATA[mine, is broke too, I don't konw what to do. What did you do?]]></message>
<type>response</type>
</post>
<post id="1" date="03/02/1983 13:23:32">
<name>Alex Egg</name>
<email>eggie5@alexegg.com</email>
<website>http://www.alex.com</website>
<title>Re: Broken speaker on my SLVR</title>
<message><![CDATA[mine, is broke too, I don't konw what to do. What did you do?]]></message>
<type>response</type>
</post>
</post>
<post id="2" date="03/02/1983 13:23:32">
<name>alex egg</name>
<email>eggie5@gmail.com</email>
<website>http://www.alexegg.com</website>
<title>the story of the curious oyster</title>
<message><![CDATA[this is a message!]]></message>
</post>
</posts>
Instead of labeling comments as comment nodes they are just post nodes and since they are embedded in a post node that implies it's a comment.
Can you revise the xsl you provided to do loop through the new xml structure?
/\ |_ E X E GG
|
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/posts">
<html>
<head>
<title>Usage of Templates</title>
</head>
<body>
<ul class="posts">
<xsl:apply-templates select="post"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="post">
<li class="post">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p>
<xsl:value-of select="message" />
</p>
<xsl:if test="post">
<ul class="sub_posts">
<xsl:apply-templates select="descendant::post" mode="sub_post"/>
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template match="post" mode="sub_post">
<li class="sub_post">
<xsl:value-of select="title"/>, <xsl:value-of select="name"/>
<p>
<xsl:value-of select="message" />
</p>
</li>
</xsl:template>
</xsl:stylesheet>
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
Hey,
I have a HTML document with a lot of (random placed) XML -files in a table. Now if a field has more then 100characters I want to open it in a popup (with a button) but! because my XML-files contain quotes and so it gives errors. How can u solve this problem?
thx!
|
|
|
|
|
Solution is simple: escape your XML data before showing. Escaping converts " symbols to " sequence.
Look at the escape function in JS reference.
-------------------------
Don't worry, be happy )
|
|
|
|
|
there is the problem, you cant give quote as parameter in a Javascript And you are saying to escape it with a javascript...
thx!
|
|
|
|
|
Just looked in MSDN - escape isn't that method, sorry...
This function helps me:
function escapeString(str)
{
var escAmpRegEx = /&/g;
var escLtRegEx = /</g;
var escGtRegEx = />/g;
var quotRegEx = /"/g;
var aposRegEx = /'/g;
str = str.replace(escAmpRegEx, "&");
str = str.replace(escLtRegEx, "<");
str = str.replace(escGtRegEx, ">");
str = str.replace(quotRegEx, """);
str = str.replace(aposRegEx, "'");
return str;
} After using it, str will not contail any illegal chars.
-------------------------
Don't worry, be happy )
|
|
|
|
|
I have escaped it in C# before it's written now
thx!
|
|
|
|
|
Hi!
I am facing problem when inserting large amount of data in XML file. I am using XML file as a replacement of database table. My application stores as many as 100000 or more records in XML file, but it takes too much time in inserting these records (almost 5-10 minutes).
I have made such insertion before but at that time structure of each node of XML was very simple with no child nodes, it took 1-2 seconds to insert 100000 records at that time. But now structure of each node is as follows:
<mobilenumberinfo id="1">
<groupid>1
<mobilenumber>123456
<isblacklisted>False
<contactmemo>
<mobileusername>
<mobilenumberinfo id="1">
Please tell me why this problem is occuring, can XML be used as alternative of database? Previously i was using MS Access for this purpose but faced same problem so swithched to XML but my problem is not solved.
Thanks in advance...
Regards,
Affan Ahmad Toor
|
|
|
|
|
It's quite hard to answer your question. What tools/languages/APIs you are using? Depending on those, runtime speed can vary greatly.
XML files can be used instead of relational databases if you don't need any of DBMS functionality, like data integrity checking, etc.
-------------------------
Don't worry, be happy )
|
|
|
|
|
Hi!
Thanks for reply! i am using C# 2005. my application is using GsmComm library but that is not related to this portion.
Can you tell me about any technique to make it more fast, by using code optimization or some thing else...
one more thing! is it OK to use XML file for such purpose? or i must use database for this...?
Regards,
Affan Ahmad Toor
|
|
|
|
|
Affan Toor wrote: i am using C# 2005
I think that you'd better ask C# forum about the best ways of handling XML.
To be short, there are many ways you can handle XML with .NET. The most simple ones (through the XmlDocument ) are also the most resource intensive.
Affan Toor wrote: one more thing! is it OK to use XML file for such purpose? or i must use database for this...?
As I said before, it depends It is a matter of many experiments to decide what is best.
-------------------------
Don't worry, be happy )
|
|
|
|
|
Thanks alot!
Regards,
Affan Ahmad Toor
|
|
|
|
|
Affan Toor wrote: I am using XML file as a replacement of database table
And there is the problem you are facing. XML is NOT a replacement for a Database. But don't believe me... use a secret web site called Google to search for articles about XML and you will find many people stating the same thing.
led mike
|
|
|
|
|
hhhummmm! So what do you suggest i should use here....? Database is not working, XML is not working then what is left...?
Regards,
Affan Ahmad Toor
|
|
|
|
|
Affan Toor wrote: Database is not working, XML is not working
The reason is not "not working", but "I haven't found the best way to handle XML".
Best regards,
- Dmitry.
-------------------------
Don't worry, be happy )
|
|
|
|
|
Affan Toor wrote: Database is not working
What is that supposed to mean?
led mike
|
|
|
|
|
Hi!
It means that i tried MS Access for this purpose, but faced same problem. It took more time than XML to insert 100000 records, and now XML also did'nt fulfill my requirement. Now i am on a dead end, i dont have any idea what to do now.....
Regards,
Affan Ahmad Toor
|
|
|
|
|
Investigate SQL Server Express and BULK INSERT
led mike
|
|
|
|
|
It's really bad idea to store data in XML for performance reasons*. XML is great for files that should be easily readable and editable by both mashine and human - such as config files - but BIG table or whole database is probably not the case; and as format for data exchange between (possibly) different platforms.
Affan Toor wrote: So what do you suggest i should use here....?
As suggested by led mike, SQL server.
[edit]*what I mean is that XML performance for large data is terrible[/edit]
"Throughout human history, we have been dependent on machines to survive. Fate, it seems, is not without a sense of irony. " - Morpheus
"Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe
|
|
|
|
|
hello ..I have the following problem
<Document>
<Employee>
<Name>John</Name>
<Class>A95</Class>
<ID>E5</ID>
</Employee>
<Employee>
<Name>Bill</Name>
<Class>B96</Class>
<ID>E4</ID>
</Employee>
<Employee>
<Name>John</Name>
<Class>A95</Class>
<ID>E5</ID>
</Employee>
</Document>
and I want for every Employee element to save it in html file
(Name of file depend on ID)
is it possible
tkml123
|
|
|
|
|
Tklem123 wrote: is it possible
yes
led mike
|
|
|
|
|
Ummm... yes? (But I don't think XSL will do it.)
|
|
|
|