|
|
Below is what I did to be able to delete problematic elements(does not conform to schema) from an XML file.
1. In the event handler, I set the innertext of error nodes to 'ERROR'
static void Schemas_ValidationEventHandler(object sender, ValidationEventArgs e)
{
//Get the Schema Validation Exception
System.Xml.Schema.XmlSchemaValidationException ex = (XmlSchemaValidationException)e.Exception;
//Get the error Xml Node
XmlNode node = (XmlNode)ex.SourceObject;
//Set the text to ERROR so that it can be removed later
//NOTE: trying to delete error nodes here as part of validation causes the validation to break
//that is why i used this method of marking problematic nodes and removing them later
node.InnerText = "ERROR";
}
2. Then I have a method to remove 'ERROR' nodes. This method along with the Validate() method is called in a loop until there are no more ERROR nodes. The resulting XML document is a document conforming to its schema with all other error nodes deleted.
static bool RemoveErrorNodes(XmlDocument xmlDoc)
{
bool deletedNodes = false;
XPathNavigator xpath = xmlDoc.CreateNavigator();
XPathNodeIterator errNodes = xpath.Select("//*");
while (errNodes.MoveNext())
{
XPathNodeIterator errNode = errNodes.Current.Select("*[text()='ERROR']");
while (errNode.MoveNext())
{
errNode.Current.DeleteSelf();
deletedNodes = true;
}
}
return deletedNodes;
}
|
|
|
|
|
hai..
I have a object like as below.. which is a FreeThreadedDOMDocument old version
Dim xslDoc As MSXML2.FreeThreadedDOMDocument
now i am just upgrading to FreeThreadedDOMDocument60 for that i have written
Dim xslDoc As MSXML2.FreeThreadedDOMDocument60
there after am having the line of code like this
xslDoc.loadXML STR_XSL1
xslDoc.selectSingleNode(STR_XPATH_PRIORITY_SORTORDER).nodeValue = " "
am getting error like object variable or with block variable not set ..if i use FreeThreadeddomdocument60..
if not used it then its working fine..
thanks in advance if any one come with answer..
Chandu
|
|
|
|
|
m_chandu wrote: FreeThreadedDOMDocument old version
It has been a while since I used MSXML so this is from old memory. Early versions of MSXML implemented pathing syntax ( I think it was called XSL Path or something ) before XPath was approved. Some Later versions added support for the XPath standard, but also maintained backwards compatibility for the original syntax, and defaulted to the using the old syntax.
If your XPath statement contains any of the new XPath features you have to tell the DOM to use the XPath syntax. I think you have to use some generic like method [ .setProperty(.....) or something ] and pass the correct string values to setup the DOM to use XPath.
led mike
|
|
|
|
|
hai led
thanks for giving the reply but i have placed the property even though am getting error what i mentioned above..
below is the total code what i have..
Dim xslDoc As MSXML2.FreeThreadedDOMDocument60
Set xslDoc = New MSXML2.FreeThreadedDOMDocument60
xslDoc.setProperty "SelectionLanguage", "XPath"
xslDoc.setProperty "SelectionNamespaces", "xmlns:xsl='http://www.w3c.org/1999/XSL/Transform'"
xslDoc.setProperty "AllowXsltScript", True
xslDoc.async = False
xslDoc.validateOnParse = False
xslDoc.loadXML strXML
xslDoc.selectSingleNode(STR_XPATH_PRIORITY_SORTORDER).nodeValue = " "
the last line is giving us error if we have FreeThreadedDOMDocument60..
without 60 its working fine..
thanks
chandu.M
|
|
|
|
|
Hi,
I have a simple xml-structure to represent my bookcase.
lib
+ books
+ serie
+ book (aut: type = IDREFS)
- title
- pages
+ authors
+ author (id: type = ID)
- first_name
- last_name
It contains 2 tables, one of the authors identified with id. And a table with the books with an attribute aut pointing to one or more of the authors.
Now i want to show the series, the booktitle and the author(s). The problems is how to show the author and not just the ID in the aut attribute.
I have used a named template to find the author
<xsl:template name="author_name">
<xsl:param name="idref"/>
<xsl:for-each select="//author[@id=$idref]">
<xsl:value-of select="last_name"/>
<xsl:value-of select="first_name"/>
</xsl:for-each>
</xsl:template>
And I'm using it like this
<xsl:call-template name="author_name">
<xsl:with-param name="idref" select="@aut"/>
</xsl:call-template>
And this works, BUT NOT for books written by 2 or more authors. I have tried tokenize but that function is only available in xls 2.0. And then IE has troubles with it.
Any help on this would be appreciated.
Learn from the mistakes of others, you may not live long enough to make them all yourself.
|
|
|
|
|
I am getting this error in soap response. I am consuming java webservice from .net 2005 C# code.
Please help me !! I pasting error below.
thanks in advance.
<soapenv:Body><soapenv:Fault><faultcode></faultcode><faultstring>com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]</faultstring><detail /></soapenv:Fault></soapenv:Body>
|
|
|
|
|
The functional requirement is , we hav a table with data in following format..
C1 C2 c3
------------------
A AA1 y
A AAA1 n
B AA1 y
B AAA1 n
C AA1 y
the required output by xslt is
C1 AA1 AAA1
--------------------
A y n
B y y
C y
Can anybody help me out from this issue.
Thanks in advance.
Tarini singh..
Zenta pvt Ltd
|
|
|
|
|
tarun_codeproject wrote: Can anybody help me out from this issue.
Help you with what? You didn't ask a question.
led mike
|
|
|
|
|
Hi
I have written the following asp.net page and creating the xml file through a method everything is fine it is creating the file but i have a problem. May be you can help for that. it is about the xml file output when it created it showing TABLE and TABLE1 as node in xml how i can change it to meaningful name. My Code is as follows. XML file is at the bottom of the code
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Xml;
using System.IO;
public partial class _Default : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){
GetEmployees("London");
}
public static void GetEmployees(string City){
//String sConnection = "server=HTCWEBDEMO;database=hometrust;user id=ht_admin;password=htc_tr!st";
String sConnection = "server=ZAFAR-PC\\SQLEXPRESS;Integrated Security=SSPI;database=northwind";
SqlConnection mySqlConnection = new SqlConnection(sConnection);
mySqlConnection.Open();
// Get the same data through the provider.
//string mySQLStatement = "SELECT Title,FirstName,LastName,PhoneNumber,Faxnumber, email from contactlist where TeamName='" + TeamName +"'; select FirstName, LastName from contactlist where TeamMorty ='True' and teamname='" + TeamName + "';";
string mySQLStatement = "SELECT FirstName,LastName,Title,City from employees where city= '" + City + "';select FirstName, LastName from employees where city='" + City + "';";
//SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySQLStatement, sConnection);
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySQLStatement, sConnection);
DataSet myDataSet2 = new DataSet();
myDataSet2.DataSetName = "Contacts";
mySqlDataAdapter.Fill(myDataSet2);
// Write data to files: data1.xml and data2.xml for comparison.
myDataSet2.WriteXml("c:/temp/ContactList.xml");
mySqlConnection.Close();
}
}
XML FILE OUTPUT
<?xml version="1.0" standalone="yes" ?>
- <Contacts>
- <Table>
<FirstName>Steven</FirstName>
<LastName>Buchanan</LastName>
<Title>Sales Manager</Title>
<City>London</City>
</Table>
- <Table>
<FirstName>Michael</FirstName>
<LastName>Suyama</LastName>
<Title>Sales Representative</Title>
<City>London</City>
</Table>
- <Table>
<FirstName>Robert</FirstName>
<LastName>King</LastName>
<Title>Sales Representative</Title>
<City>London</City>
</Table>
- <Table>
<FirstName>Anne</FirstName>
<LastName>Dodsworth</LastName>
<Title>Sales Representative</Title>
<City>London</City>
</Table>
- <Table1>
<FirstName>Steven</FirstName>
<LastName>Buchanan</LastName>
</Table1>
- <Table1>
<FirstName>Michael</FirstName>
<LastName>Suyama</LastName>
</Table1>
- <Table1>
<FirstName>Robert</FirstName>
<LastName>King</LastName>
</Table1>
- <Table1>
<FirstName>Anne</FirstName>
<LastName>Dodsworth</LastName>
</Table1>
</Contacts>
|
|
|
|
|
hello everyone..
how can i parse an xml documents and/or how can i convert a doc file to xml file. is this possible??
hope anyone can help me about this...
thanks in advance..
jyn
|
|
|
|
|
jhyn wrote: how can i parse an xml documents
go to www.w3schools.com
they have a tutorial on XML.
jhyn wrote: how can i convert a doc file to xml file. is this possible??
Newer versions of MS Word support saving a document as XML. The latest versions now default to XML. See the thread below about OOXML and WordprocessingML .
led mike
|
|
|
|
|
thank you for your reply
jyn
|
|
|
|
|
Hello.
I work on docx parser. All i need is to extract text and some layout info (such as font name, font size, alignment and so on).
I confront a problem while parsing document's main part (document.xml).
The problem is word division. For some reason Word 2007 sometimes divide words in to different runs.
Example:
"Identifier information about the certificate authority that issued the certificate."
In document.xml it looks like
<w: p w:rsidR="00000000" w:rsidRDefault="00B91456">
<w:pPr>
<w:pStyle w:val="BulletedList" />
<w:numPr>
<w:ilvl w:val="0" />
<w:numId w:val="72" />
</w:numPr>
</w:pPr>
<w:r>
<w:t>Iden</w:t>
</w:r>
<w:r>
<w:t>tifier information about the certificate authority that issued the certificate.</w:t>
</w:r>
</w: p>
The other example:
"The server certificate name specified should match the fully qualified domain name."
In document.xml it looks like
<w: p w:rsidR="00000000" w:rsidRDefault="00B91456">
<w:pPr>
<w:pStyle w:val="Listalerttext" />
<w:framePr w:wrap="notBeside" />
</w:pPr>
<w:r>
<w:t>The server c</w:t>
</w:r>
<w:r>
<w:t>ertificate name specified should match the fully qualified domain name.</w:t>
</w:r>
</w: p>
What is the reason behind this?
And, what is more important, how can I handle this?
Such situation occurs many times and I completely don't no what to do.
Word 2007 somehow handles it, can anyone suggest how?
thanks..
|
|
|
|
|
Member 4083157 wrote: What is the reason behind this?
And, what is more important, how can I handle this?
I don't know, but if I needed to know I might start by reading the documentation[^] rather than typing messages into internet forums.
led mike
|
|
|
|
|
Well.. it's a very good advice, but the problem is, that I already read the WordprocessingML part 5 times and I didn't find anything regarding my problem..
That's why I'm asking here..
|
|
|
|
|
Member 4083157 wrote: I already read the WordprocessingML part 5 times
You should state in your posts what documentation you read and how/why it seems not to provide your solution. Otherwise someone might waste their time providing you with a link because most people here on code project never read any documentation.
Also if you read any documentation it is confusing that you do not understand that nature of the run element . Can you please link to and explain why, the documentation you cited does not (for you) indicate the nature of the run element .
led mike
|
|
|
|
|
Ok, sorry, i'll post documentation in future =)
OOXML documentation, part 4 says that the run defines a region of text with a common set of properties, represented by the r element. An r element allows the producer to specify a single set of formatting properties, applying the same information to all the contents of the run.
As I understood, it means, that some region of the text (from the same paragraph) whith the common set of properties can be placed in one run, am i not correct?
The question is why there so many runs with the same properties in one paragraph? In most documents I viewed, there where lots of runs within the paragraph and all of them had the same properties.
In my case, even word was divided.
I came to the conclusion, that after some change of properties (and then back to the original), text can be divided in different runs, but how should i handle this?
What is really confuses me, is xml:space="preserve" element, OOXML specification refers to
http://www.w3.org/XML/1998/namespace, which says
The value "default" signals that applications' default white-space processing modes are acceptable for this element;
the value "preserve" indicates the intent that applications preserve all the white space.
This declared intent is considered to apply to all elements within the content of the element where it is specified,
unless overridden with another instance of the xml:space attribute.
But I really couldn't find any logic of how it works in OOXML..
|
|
|
|
|
The problem was solved.
All, what was said about xml:space="preserve" above is correct.
The problem was in my viewer, which incorret displaid documents.
|
|
|
|
|
Member 4083157 wrote: The problem was in my viewer, which incorret displaid documents.
I am glad you resolved the issue, and thanks for posting back your findings. Which viewer were you using?
led mike
|
|
|
|
|
Hi all
In my projecr we need to handle the singleclick and doubleclick events ;
when i use single click one action should perform
when i use doubleclick another action should perform
pleae help me
#sanroop#
|
|
|
|
|
And how do you do propose doing it in XML? Wrong question, wrong forum. Which is why you have had no answers.
Bob
Ashfield Consultants Ltd
|
|
|
|
|
Hi,
I am using an XSL file to format a document for display on my website. A content block has a title, and contains HTML content. The references section always appears at the bottom of the rendered document (regardless of its location within the XML file).
<?xml version="1.0"?>
<mydoc>
<content title="Introduction">
...
</content>
<references>
...
</references>
</mydoc>
In the XSL I want to create a contents for the document. I have managed to get the content sections listed in the contents. But I find myself duplicating a large chunk of XSL just to add the references section to the contents.
Is there a way to do something along the lines of the following?
<xsl:variable name="contents-listing">
concatenate
?? Get list of content nodes "/mydoc/content" ??
with
<content title="References">
<references>
...
</references>
</content>
</xsl:variable>
so that I can:
<xsl:for-each select="$contents_listing">
<!-- Clicking an item goes to the corresponding named anchor -->
<a>
<xsl:attribute name="href">
<xsl:value-of select="concat('#ref', position())" />
</xsl:attribute>
<xsl:value-of select="@title" />
</a>
</xsl:for-each>
and also:
<xsl:for-each select="$contents-listing">
<!-- Named anchor indicates where to click goes to -->
<a>
<xsl:attribute name="name">
<xsl:value-of select="concat('ref', position())" />
</xsl:attribute>
<xsl:apply-templates />
</a>
</xsl:for-each>
Many thanks,
Lea Hayes
|
|
|
|
|
It's probably easy in XSLT 2, but if you're using XSLT 1 like most of us who are relying on Microsoft tools, avoiding duplicated xsl code ist hard.
Using a workaround pattern I've sometimes applied in such cases it would look like this:
<mydoc>
<content title="Introduction">
<xsl:call-template name="EvaluateContent">
<xsl:with-param name="Context">Contents</xsl:with-param>
</xsl:call-template>
</content>
<references>
<xsl:call-template name="EvaluateContent">
<xsl:with-param name="Context">References</xsl:with-param>
</xsl:call-template>
</references>
</mydoc>
<xsl:template name="EvaluateContent">
<xsl:param name="Context" />
<xsl:for-each select="/mydoc/content">
<xsl:choose>
<xsl:when test="$Context = 'Contents'">
<a>
<xsl:attribute name="href">
<xsl:value-of select="concat('#ref', position())" />
</xsl:attribute>
<xsl:value-of select="@title" />
</a>
</xsl:when>
<xsl:when test="$Context = 'References'">
<a>
<xsl:attribute name="name">
<xsl:value-of select="concat('ref', position())" />
</xsl:attribute>
</a>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
This is not nice, and can be further refined, but the only way I know to avoid duplicating the logic contained in the for-each statement.
I don't have the patience right now to adjust the tabs and spaces which don't look right in the preview.
And please be aware that I just copied and pasted it from some old stylesheets of mine and your fragments and have not tested it. There may be syntax errors, but I'm sure you get the gist.
And if any one points out a better pattern, I'll add my thanks to yours.
|
|
|
|
|
Hi,
Thanks for your advice! This has helped me to solve the problem!
Best regards,
Lea Hayes
|
|
|
|