|
On another forum (I know naughty) I got this response:
Well XPath 1.0 uses double floating point numbers like JavaScript or
Java do too and with these there is limited precision, in particular
when there is no finite binary representation of a number.
With XSLT 1.0 you can use format-number to ensure you get a certain
number of decimal positions. Or you need to change to XPath 2.0 (as
implemented by Saxon 9) and use xs:decimal numbers instead of double
numbers.
--
Martin Honnen --- MVP XML
http://msmvps.com/blogs/martin_honnen/
Thanks Martin
|
|
|
|
|
contactowen wrote: On another forum (I know naughty)
Indeed - consider your CP membership revoked!!!
contactowen wrote: With XSLT 1.0 you can use format-number to ensure you get a certain number of decimal positions.
Quite true - I wasn't aware of that function until you mentioned it
contactowen wrote: Or you need to change to XPath 2.0 (as
implemented by Saxon 9) and use xs:decimal numbers instead of double numbers.
Also true (in the commercial version of Saxon, anyway - I don't think the free one supports XML Schema datatypes) - I presumed that you would be using MSXML, in which case XPath 2.0 and XSLT 2.0 aren't really an option.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
can any one please help me out to insert the another image in the form of base64
inside the aatribute
<>
I have a xml format like above and I want to inset the image in place of existing image .
Please help
|
|
|
|
|
Firstly you need to convert your image to base64 - I'll presume you know how to do this.
To insert the new value, you need to navigate to the relevant element using the XML DOM[^] API. Then (presuming you're using Microsoft's MSXML) you would use the IXMLDOMElement::setAttribute[^] method with a name of "image" and the value set to the base64 encoded image string.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi
I am writing a code generation app using xslt.
My purpose is to check if any two nodes of the same parent node, have the same attribute value.
If so I want to append a number sequence in the ouput code, so that there is no duplication.
For example
-------------
if xml file is like
<code>
<methods>
<method name="first">
<method name="first">
<method name="second">
<method name="third">
</methods></code>
I want the output to be
-------------
void first1() {}
void first2() {}
void second() {}
void third() {}
Note: there is no number sequence attached to function name if it is not duplicated.
How to write XSLT to achieve this?
Thank you
Fadi
|
|
|
|
|
You want to use the 'preceding-sibling' and 'following-sibling' axes, like this:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="//methods/method"/>
</xsl:template>
<xsl:template match="method">
<!-- index is set to an empty value if the current name is unique in
the current set of 'method' elements, or to the index of the
current method in the set of methods with the same name if the
name isn't unique -->
<xsl:variable name="index"><xsl:if test="count(preceding-sibling::*[@name=current()/@name]) + count(following-sibling::*[@name=current()/@name])>0"><xsl:value-of select="1+count(preceding-sibling::*[@name=current()/@name])"/></xsl:if></xsl:variable>
void <xsl:value-of select="concat(@name, $index)"/>() {}
</xsl:template>
</xsl:stylesheet>
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
modified on Monday, June 15, 2009 2:14 PM
|
|
|
|
|
Thank you very much Stuart.. It really worked... Hats off to u
|
|
|
|
|
Hi,
When trying to use insertbefore() method to insert a node from an xml file to other Xml file the node is getting deleted from the old Xml file...
Please help me regarding the same..
|
|
|
|
|
You need to import the node, XmlNode XmlDocument.ImportNode(XmlNode, bool) , first.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
All,
I am some what new to C# and XML as well.
I am having one interesting query,
I am having one XML based file one (first.xml). it ios having the Element\Attrbute like
((<text id="textID" Font="Roman" Style="Regular"> Sample </text>))
Other XML file (second.xml) is having the data like
((<PersonalInfo>
<First Name> Raja </FirstName>
</PersonalInfo>))
I simple want to replace Sample in File1.xml with Raja from File2.xml
Can this be possible and achiveable.
Please help this is somewhat very urgent. PLease try to give full code not just idea. Since I am having the logic bit not able to implement.
THanks,
|
|
|
|
|
Hi Guys, wondering if you can help me again,
I need to write a stylesheet for a xml document, i need to convert it to a html table with a header, i can get the header working and get the table created but i can't get the xml put within the table.
the code is below do you any ideas, i thought this was quite a simple task but its turns out harder than i thought.
xml sample - there is more to the code but this is a example, with the report is the title and other info but that is not relevent as the arguments fields is what i need to put into a table
<report-item-definition>
<arguments>
<argument>
<name>xVar</name>
<type>Column</type>
<default>@IPRED</default>
<display-name>X Axis Variable</display-name>
<description>X Axis Variable</description>
<visible>FALSE</visible>
<filter-type>@ALL</filter-type>
</argument>
<argument>
</report-item-definition>
The table show look like the following
Name - Type - Default - Display Name - Description - Visible - Filter Type
At the moment my style sheet looks like this - but it does not seem to be working
<?xml version="1.0" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match ="/">
<html>
<head>
<title>XML Stylesheet</title>
</head>
<body>
<h1 align="center"><b><xsl:value-of
select="report-item-definition/item-title" /></b></h1>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="report-item-definition/arguments">
<table width="700" border="1" align="center" style="font-family:verdana
font-size:10pt">
<tr bgcolor = "#cccccc">
<td width="130" align="center"><b>Name</b></td>
<td align="center"><b>Type</b></td>
<td align="center"><b>Default</b></td>
<td align="center"><b>Display Name</b></td>
<td align="center"><b>Description</b></td>
<td align="center"><b>Visible</b></td>
<td align="center"><b>Filter Type</b></td>
</tr>
<xsl:for-each select="arguments/argument">
<tr>
<td><xsl:value-of select="name" /></td>
<!--<td><xsl:value-of select="type" /></td>
<td><xsl:value-of select="default" /></td>
<td><xsl:value-of select="display-name" /></td>
<td><xsl:value-of select="descriptions" /></td>
<td><xsl:value-of select="visible" /></td>
<td><xsl:value-of select="filter-type" /></td>-->
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
|
|
|
|
|
Your xsl:for-each executes in the scope of the current node, arguments. However, your XPath expression was designed to match a child arguments node of a parent arguments node:
<xsl:for-each select="arguments/argument"> It should be:
<xsl:for-each select="argument"> since the argument node is a child of the arguments node.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
This is how I'd tend to write it - differences are:
- I've used CSS, rather than inline styles - my preference
- I've used the thead element for the header
- I've split up the templates a bit more - if you had more than one report-item-definition in an XML file, that would be useful Also, it makes the context node more obvious, so you don't get issues like the one you had that George pointed out previously.
- I've used <xsl:apply-templates select="argument"/> rather than <xsl:for-each select="..."> to output each row of the table. My feeling is that using apply-templates like this is probably better idiomatic XSL than using for-each
<?xml version="1.0" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match ="/">
<html>
<style>
th { text-align: center }
thead { background-color: #cccccc }
h1 { text-align: center; font-weight: bold }
</style>
<head>
<title>XML Stylesheet</title>
</head>
<body>
<xsl:apply-templates select="report-item-definition"/>
</body>
</html>
</xsl:template>
<xsl:template match="report-item-definition">
<h1><xsl:value-of select="item-title" /></h1>
<xsl:apply-templates select="arguments"/>
</xsl:template>
<xsl:template match="arguments">
<table width="700" border="1" align="center" style="font-family:verdana font-size:10pt">
<thead>
<tr>
<th width="130"><b>Name</b></th>
<th><b>Type</b></th>
<th><b>Default</b></th>
<th><b>Display Name</b></th>
<th><b>Description</b></th>
<th><b>Visible</b></th>
<th><b>Filter Type</b></th>
</tr>
</thead>
<xsl:apply-templates select="argument"/>
</table>
</xsl:template>
<xsl:template match="argument">
<tr>
<td><xsl:value-of select="name" /></td>
<!--<td><xsl:value-of select="type" /></td>
<td><xsl:value-of select="default" /></td>
<td><xsl:value-of select="display-name" /></td>
<td><xsl:value-of select="descriptions" /></td>
<td><xsl:value-of select="visible" /></td>
<td><xsl:value-of select="filter-type" /></td>-->
</tr>
</xsl:template>
</xsl:stylesheet>
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi,
I am trying to serialize an object, I am getting exception as
"Unable to cast object Type A to Type B".
Please help me in finding soultion
Thanks,
Mini
Best Regards,
Mini Thomas
|
|
|
|
|
|
Howdy'
In one of our data XML files, we need to have attribute values preserve white space at the end.
For example :
<!-- without space -->
<MyTag MyAttribute="a value" />
<!-- with space -->
<MyTag MyAttribute="a value " />
Are two different attribute values.
I tried using the preserve white space attribute
pXMLDoc->preserveWhiteSpace = VARIANT_TRUE;
but that completely craps out the parsing of the file, for example, sometimes (well, always)
I get the wrong number of items in a node list (IXMLDOMNodeListPtr )
for example, in the following snippet, when preserveWhiteSpace is FALSE, the list count is 2 and when preserveWhiteSpace is TRUE, the list count if 5 (!)
<MESSAGE_LIST>
<MESSAGE Id="10" Type="Info">
<FRENCH>Message 10</FRENCH>
</MESSAGE>
<MESSAGE Id="11" Type="Info">
<FRENCH>Message 11</FRENCH>
</MESSAGE>
</MESSAGE_LIST>
Is there something I can do to MSXML to have the parsing behaviour that I want ? i.e. read significant spaces from an attribute value.
Thanks for any help, tips or hints.
Max.
This signature was proudly tested on animals.
|
|
|
|
|
Maximilien wrote: for example, in the following snippet, when preserveWhiteSpace is FALSE, the list count is 2 and when preserveWhiteSpace is TRUE, the list count if 5 (!)
That's because there are text nodes in the list - they're the manifestation of the whitespace that's been preserved from the source XML.
I'm not sure that the preserve whitespace option affects attribute values anyway...
Here's some quick test code I wrote that demonstrates correct whitespace handling in attribute values - the value of the arp attribute of the test element is correctly read with a trailing space:
#include "stdafx.h"
#import <progid:Msxml2.DOMDocument.6.0> named_guids
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize(0);
MSXML2::IXMLDOMDocument3Ptr doc;
doc.CreateInstance(MSXML2::CLSID_DOMDocument60);
if (VARIANT_FALSE != doc->loadXML(_bstr_t(L"<test arp=\"test \">\n Hello!\n</test>")))
{
MSXML2::IXMLDOMNodeListPtr nodes = doc->childNodes;
MSXML2::IXMLDOMNodePtr thisNode = nodes->nextNode();
if (thisNode)
do
{
std::cout << thisNode->nodeTypeString << " - " << thisNode->text << std::endl;
MSXML2::IXMLDOMNamedNodeMapPtr attributes = thisNode->attributes;
{
MSXML2::IXMLDOMNodePtr thisAttribute = attributes->nextNode();
if (thisAttribute)
do
{
std::cout << " " << thisAttribute->nodeName << " - \"" << _bstr_t(thisAttribute->nodeValue) << "\"" << std::endl;
} while (thisAttribute = attributes->nextNode());
}
} while (thisNode = nodes->nextNode());
}
return 0;
}
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thanks, I will look at your sample and report back.
---edit----
Yep, that works.
Thanks.
This signature was proudly tested on animals.
modified on Wednesday, June 10, 2009 9:52 AM
|
|
|
|
|
I am trying to format my html table as i have a field labeled description with multiple lines and i was wondering is there anyway to format them using a substring function, i would also like them with bullet points any help?
<field name="Description" index="description">
This is a test script designed to illustrate DDML features.
Read some data
View the data
Require some libraries (actually we don't, but it shows off some of the functionality)
Do some funky Emax model stuff ...
Sample code from <a href="http://www.e-booksdirectory.com/details.php?ebook=1791">An introduction to R</a>
</field>
Above is a samble of what i want, for each line i want ot use a substring to read each line stick it in a bullet point and move onto the next untill they are also done.
also i need to find away to carry over the link to the html table.
below is sample of my stylesheet.
<table width="700" border="1" align="center" style="font-family:verdana font-size:10pt">
<tr bgcolor = "#cccccc">
<td width="130" align="center"><b>Title</b></td>
<td align="center"><b>Information</b></td>
</tr>
<xsl:apply-templates/>
</table>
></xsl:template>
<xsl:template match="field">
<tr>
<td><xsl:value-of select="@name" /></td>
<td><xsl:value-of select="." /></td>
</tr>
</xsl:template>
</xsl:stylesheet>
I would appreicate any help possible, thank you
|
|
|
|
|
One thing I see a problem with immediately - the <a> tag won't be included in the text for <field> - it's a nested tag.
Aside form that, this is roughly what you need:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="//field"/>
</xsl:template>
<!--
Template for a field element. Apply template for each of its text nodes.
-->
<xsl:template match="field">
<ul>
<xsl:apply-templates select="text()"/>
</ul>
</xsl:template>
<!--
Template for text() in a field element. Apply the line-splitting algorithm to the text
-->
<xsl:template match="/field/text()">
<xsl:call-template name="t">
<xsl:with-param name="s" select="."/>
</xsl:call-template>
</xsl:template>
<!--
Template t takes one string parameter s. It takes off the first line
then recurses, terminating when the input parameter is the empty string
-->
<xsl:template name="t">
<xsl:param name="s"/>
<!--
Is there any text to process?
-->
<xsl:if test="string-length($s)>0">
<!--
first = text before the first line break (or null if it's the last, unterminated line)
-->
<xsl:variable name="first" select="substring-before($s, '
')"/>
<xsl:choose>
<!--
Output first if it has content
-->
<xsl:when test="string-length($first)>0">
<li><xsl:value-of select="$first"/></li>
</xsl:when>
<xsl:otherwise>
<!--
Output the input string if it doesn't contain a line break
-->
<xsl:if test="substring($s,1,1)!='
'">
<li><xsl:value-of select="$s"/></li>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
<!--
Recurse, passing in the text after the first line break
-->
<xsl:call-template name="t">
<xsl:with-param name="s" select="substring-after($s, '
')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
--> can v apply CSS on XML sheet?
--> if ya den how?
J A Nasir K
|
|
|
|
|
This is a stupid question. Even if it was written in English, it would still be stupid. How is a plain XML document displayed, that it would interact with CSS ?
Christian Graus
Driven to the arms of OSX by Vista.
"! i don't exactly like or do programming and it only gives me a headache." - spotted in VB forums.
I can do things with my brain that I can't even google. I can flex the front part of my brain instantly anytime I want. It can be exhausting and it even causes me vision problems for some reason. - CaptainSeeSharp
|
|
|
|
|
Christian Graus wrote: How is a plain XML document displayed, that it would interact with CSS ?
Not such a stupid question, Christian - see this example[^]...
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
OK, so the XML basically gets treated as XHTML ? I'd have expected to use XSLT to create that sort of a view.
Christian Graus
Driven to the arms of OSX by Vista.
"! i don't exactly like or do programming and it only gives me a headache." - spotted in VB forums.
I can do things with my brain that I can't even google. I can flex the front part of my brain instantly anytime I want. It can be exhausting and it even causes me vision problems for some reason. - CaptainSeeSharp
|
|
|
|
|
Christian Graus wrote: OK, so the XML basically gets treated as XHTML
Something like that - I guess each of the elements gets treated a bit like a DIV in HTML, i.e. no implied display semantics.
The 'original' stylesheet language was DSSSL, which was designed for use with SGML (ancestor of XML and HTML). Looking at this DSSSL sample[^], you can (kind of) see a resemblance to CSS. So, I guess there's a parallel link between SGML -> XML/XHTML/HTML on the one side and DSSSL -> CSS on t'other.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|