473,378 Members | 1,500 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,378 software developers and data experts.

XPath problem with two xmlns

I have got file raport.rld which is an XML file generated by MS Reporting
Services.

The problem is:

in this file are tags from two different namespaces

xmlns="http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefini
tion"
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"

when I'm trying to use XPATH to get <teble> tag it doesn't work. (the
result is empty)

I've removed All tegs like

<rd:TypeName>System.Int32</rd:TypeName>

Now all is working fine but what to do when I have tags from two different
namespaces?

I don't want to remove all tags from second namespace.

Tom.

Nov 12 '05 #1
4 8939


Gismo wrote:
I have got file raport.rld which is an XML file generated by MS Reporting
Services.

The problem is:

in this file are tags from two different namespaces

xmlns="http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefini
tion"
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"

when I'm trying to use XPATH to get <teble> tag it doesn't work. (the
result is empty)

I've removed All tegs like

<rd:TypeName>System.Int32</rd:TypeName>

Now all is working fine but what to do when I have tags from two different
namespaces?


You need to declare a prefix for every namespace and then use the prefix
in your XPath expression. How you do that depends on the environment, if
you use XPath inside of an XSLT stylesheet you can simply declare the
prefixes with
<xsl:stylesheet

xmlns:rd="xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
and then use
rd:TypeName
in your XPath expression.

If you are using an API like selectNodes/selectSingleNode then you need
to call
xmlDocument.setProperty("SelectionNamespaces",

"xmlns:rd='http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'")

--

Martin Honnen
http://JavaScript.FAQTs.com/

Nov 12 '05 #2

Uzytkownik "Martin Honnen" <ma*******@yahoo.de> napisal w wiadomosci
news:Oq*************@TK2MSFTNGP09.phx.gbl...


Gismo wrote:
I have got file raport.rld which is an XML file generated by MS Reporting Services.

The problem is:

in this file are tags from two different namespaces

xmlns="http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefini tion"
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
when I'm trying to use XPATH to get <teble> tag it doesn't work. (the
result is empty)

I've removed All tegs like

<rd:TypeName>System.Int32</rd:TypeName>

Now all is working fine but what to do when I have tags from two different namespaces?
You need to declare a prefix for every namespace and then use the prefix
in your XPath expression. How you do that depends on the environment, if
you use XPath inside of an XSLT stylesheet you can simply declare the
prefixes with
<xsl:stylesheet

xmlns:rd="xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportd
esigner" and then use
rd:TypeName
in your XPath expression.

If you are using an API like selectNodes/selectSingleNode then you need
to call
xmlDocument.setProperty("SelectionNamespaces",

"xmlns:rd='http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'"
)
--

Martin Honnen
http://JavaScript.FAQTs.com/

There is no method like setProperty.
My example code is:

My example code is:
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("c:/tab2.xml");

XmlElement root = doc.DocumentElement;

XmlNodeList nodeList;
nodeList = root.SelectNodes("//Table");
if (nodeList != null)
foreach (XmlNode s1 in nodeList)
{
try
{
Console.WriteLine(s1.Name);
}
catch (XmlException e) {
Console.WriteLine(e.Message);
}
}
}
}


Gismo.

Nov 12 '05 #3


Gismo wrote:
Uzytkownik "Martin Honnen" <ma*******@yahoo.de> napisal w wiadomosci
news:Oq*************@TK2MSFTNGP09.phx.gbl...

Gismo wrote:

I have got file raport.rld which is an XML file generated by MS
Reporting
Services.

The problem is:

in this file are tags from two different namespaces
xmlns="http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefini
tion"

xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
when I'm trying to use XPATH to get <teble> tag it doesn't work. (the
result is empty)

I've removed All tegs like

<rd:TypeName>System.Int32</rd:TypeName>

Now all is working fine but what to do when I have tags from two
different
namespaces?
You need to declare a prefix for every namespace and then use the prefix
in your XPath expression. How you do that depends on the environment, if
you use XPath inside of an XSLT stylesheet you can simply declare the
prefixes with
<xsl:stylesheet


xmlns:rd="xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportd
esigner"
and then use
rd:TypeName
in your XPath expression.

If you are using an API like selectNodes/selectSingleNode then you need
to call
xmlDocument.setProperty("SelectionNamespaces",


"xmlns:rd='http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'"
)

There is no method like setProperty.


Sorry, I thought you might be using MSXML but you use .NET, there indeed
is no such method.

With .NET you need an XmlNamespaceManager and declare the prefixes for
your XPath expressions and then pass that manager to the SelectNodes method.
For instance with the example document being

<?xml version="1.0" encoding="UTF-8"?>
<gods xmlns="http://vatican.va/2004/gods">
<god name="Kibo" />
<god name="Jaffo" />
<dv:devil xmlns:dv="http://vatican.va/2004/devils" name="Xibo" />
</gods>

the following successfully queries the document using XPath

using System;
using System.Xml;

public class Test20040402 {
public static void Main (string[] args) {
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"test20040402.xml");
XmlNamespaceManager namespaceManager = new
XmlNamespaceManager(xmlDocument.NameTable);
namespaceManager.AddNamespace("gs", "http://vatican.va/2004/gods");
namespaceManager.AddNamespace("dv", "http://vatican.va/2004/devils");
XmlNodeList gods = xmlDocument.SelectNodes("/gs:gods/gs:god",
namespaceManager);
Console.WriteLine("Found {0} elements.", gods.Count);
foreach (XmlNode node in gods) {
Console.WriteLine(node.Name);
}
gods = xmlDocument.SelectNodes("/gs:gods/dv:devil", namespaceManager);
Console.WriteLine("Found {0} elements.", gods.Count);
foreach (XmlNode node in gods) {
Console.WriteLine(node.Name);
}
}

}
--

Martin Honnen
http://JavaScript.FAQTs.com/

Nov 12 '05 #4

Thanx, it works fine now.
:-)

Gismo.

Uzytkownik "Martin Honnen" <ma*******@yahoo.de> napisal w wiadomosci
news:#T**************@TK2MSFTNGP10.phx.gbl...


Gismo wrote:
Uzytkownik "Martin Honnen" <ma*******@yahoo.de> napisal w wiadomosci
news:Oq*************@TK2MSFTNGP09.phx.gbl...

Gismo wrote:
I have got file raport.rld which is an XML file generated by MS
Reporting
Services.

The problem is:

in this file are tags from two different namespaces


xmlns="http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefini
tion"


xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"


when I'm trying to use XPATH to get <teble> tag it doesn't work. (the
result is empty)

I've removed All tegs like

<rd:TypeName>System.Int32</rd:TypeName>

Now all is working fine but what to do when I have tags from two


different
namespaces?

You need to declare a prefix for every namespace and then use the prefix
in your XPath expression. How you do that depends on the environment, if
you use XPath inside of an XSLT stylesheet you can simply declare the
prefixes with
<xsl:stylesheet


xmlns:rd="xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportd esigner"
and then use
rd:TypeName
in your XPath expression.

If you are using an API like selectNodes/selectSingleNode then you need
to call
xmlDocument.setProperty("SelectionNamespaces",


"xmlns:rd='http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'" )

There is no method like setProperty.


Sorry, I thought you might be using MSXML but you use .NET, there indeed
is no such method.

With .NET you need an XmlNamespaceManager and declare the prefixes for
your XPath expressions and then pass that manager to the SelectNodes

method. For instance with the example document being

<?xml version="1.0" encoding="UTF-8"?>
<gods xmlns="http://vatican.va/2004/gods">
<god name="Kibo" />
<god name="Jaffo" />
<dv:devil xmlns:dv="http://vatican.va/2004/devils" name="Xibo" />
</gods>

the following successfully queries the document using XPath

using System;
using System.Xml;

public class Test20040402 {
public static void Main (string[] args) {
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"test20040402.xml");
XmlNamespaceManager namespaceManager = new
XmlNamespaceManager(xmlDocument.NameTable);
namespaceManager.AddNamespace("gs", "http://vatican.va/2004/gods");
namespaceManager.AddNamespace("dv", "http://vatican.va/2004/devils");
XmlNodeList gods = xmlDocument.SelectNodes("/gs:gods/gs:god",
namespaceManager);
Console.WriteLine("Found {0} elements.", gods.Count);
foreach (XmlNode node in gods) {
Console.WriteLine(node.Name);
}
gods = xmlDocument.SelectNodes("/gs:gods/dv:devil", namespaceManager); Console.WriteLine("Found {0} elements.", gods.Count);
foreach (XmlNode node in gods) {
Console.WriteLine(node.Name);
}
}

}
--

Martin Honnen
http://JavaScript.FAQTs.com/

Nov 12 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Hollywood | last post by:
I have the following XSD created in VS.NET 2003: <?xml version="1.0" encoding="utf-8" ?> <xs:schema id="ReferralSchama" targetNamespace="http://test.org/Referral"...
2
by: ree32 | last post by:
When I import an xml document in Visual studio and Genereate as schema from it, and create a dataset from it, it adds this line into to the root element of my xml file -...
3
by: Jason Mobarak | last post by:
Hello -- I'm attempting to get a handle on how to do xpath queries with System.Xml -- so far the biggest hurdle has been how to deal with a default namespace. If I use the test xml: <?xml...
2
by: Monty | last post by:
Despite reading posts in Google, I don't understand XPATH. Can someone help me write an XPATH. From Google I think my problem is that the default namespace does not have a prefix. I can't change...
6
by: J.Marsch | last post by:
I must be completely losing my mind. I have some code that writes to config files. It works great with app.config files, but fails miserably with web.config files. For the life of me, I cannot...
2
by: A. W. Dunstan | last post by:
I'm trying to figure out how XPath expressions work, and how I can use them to extract data into a particular format. I can extract the data I want using an XPath expression, but not with an XSLT...
1
by: reyesvsn | last post by:
Hello everybody, I have a question concerning XPath expressions and namespaces. Consider this XML: <?xml version="1.0" encoding="UTF-8"?> <newsMessage ...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.