-
March 1st, 2006, 01:09 PM
#1
"element is not declared" when xsd on an xml file
Can anyone tell me why when I atempt to validate my below xml file against the xsd file, I get the below error message?
Many thanks.
The 'ItemList' element is not declared. An error occurred at file:///g:/temp/WDWEBSVC.XML, (4, 2).: Message:{0}
****************************************************************************
<?xml version="1.0" encoding="us-ascii" standalone="yes"?>
<?xml-stylesheet version='1.0'?>
<!--this file contains wdog xml data for all items-->
<ItemList xmlns:il="http://tempuri.org/WDWEBSVC.xsd">
<Item>
<strItemName>Ping Nifty Tools</strItemName>
<strItemAddress>www.niftytools.com</strItemAddress>
<strItemType>Ping</strItemType>
<strItemStatus>Ping</strItemStatus>
</Item>
<Item>
<strItemName>Html download Nifty Tools</strItemName>
<strItemAddress>http://www.niftytools.com</strItemAddress>
<strItemType>HTML Download</strItemType>
<strItemStatus>HTML Download</strItemStatus>
</Item>
<Item>
<strItemName>Screen Saver</strItemName>
<strItemAddress>http://infodeli.3com.com/index.htm</strItemAddress>
<strItemType>NT Screen Saver</strItemType>
<strItemStatus>NT Screen Saver</strItemStatus>
</Item>
</ItemList>
****************************************************************************
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ItemList" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:il="http://tempuri.org/WDWEBSVC.xsd"
targetNamespace="http://tempuri.org/WDWEBSVC.xsd">
<xs:element name="ItemList" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Item">
<xs:complexType>
<xs:sequence>
<xs:element name="strItemName" type="xs:string" minOccurs="0" />
<xs:element name="strItemAddress" type="xs:string" minOccurs="0" />
<xs:element name="strItemType" type="xs:string" minOccurs="0" />
<xs:element name="strItemStatus" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
****************************************************************************
MyXmlTextReader = new XmlTextReader ( strCheckFile );
MyXmlValidatingReader = new XmlValidatingReader ( MyXmlTextReader );
try {
MyXmlValidatingReader.Schemas.Add ( strCheckUrn, strCheckSchema );
MyXmlValidatingReader.ValidationType = ValidationType.Schema;
MyXmlValidatingReader.ValidationEventHandler += new ValidationEventHandler ( ValidationCallback );
try {
// read whole file and check it
m_bXmlFileIsValid = true;
while ( MyXmlValidatingReader.Read() )
{
if ( m_bXmlFileIsValid == false ) break; // abort if error
}
return ( m_bXmlFileIsValid ); // set in ValidationCallback()
}
catch ( Exception e )
{
if ( MyXmlValidatingReader != null ) MyXmlValidatingReader.Close();
Debug.WriteLine ( "Validate error: " + e.ToString() );
m_bXmlFileIsValid = false;
return ( m_bXmlFileIsValid );
}
-
March 2nd, 2006, 09:02 AM
#2
Re: "element is not declared" when xsd on an xml file
Name space problem.
Your Itemlist element is not in the http://tempuri.org/WDWEBSVC.xsd namespace.
Easiest way to make it validate is add il: at the beginning of these elements in your xml file.
<il:ItemList xmlns:il="http://tempuri.org/WDWEBSVC.xsd">
...
</il:ItemList>
not sure if that's exactly what you want.
-
March 2nd, 2006, 11:42 AM
#3
Re: "element is not declared" when xsd on an xml file
Thank you.
I added the il: and /il:
and it now validates BUT i now have a new problem.
Now my XPATH query fails with 0 items found.
.
.
.
XmlDocument MyXmlDocument = new XmlDocument ();
MyXmlDocument.Load ( strItemInfoXmlPathFileName );
XPathNavigator MyXPathNagivator =
MyXmlDocument.CreateNavigator ();
MyXPathNagivator.MoveToRoot ();
// select all items
XPathNodeIterator MyXPathNodeIterator =
MyXPathNagivator.Select ( "/ItemList/Item" );
Debug.WriteLine ( "got " + MyXPathNodeIterator.Count +
" items" );
- returns 0 items when it should return 3 items ! help! See the xml data file in the previous post
-
March 3rd, 2006, 09:29 AM
#4
Re: "element is not declared" when xsd on an xml file
I think what you want is to have all your elements inside a single namespace, correct? If not, please clarify.
Requires 3 changes from your original.
1. add elementFormDefault attribute to your schema.
<xs:schema id="ItemList" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:il="http://tempuri.org/WDWEBSVC.xsd"
targetNamespace="http://tempuri.org/WDWEBSVC.xsd"
elementFormDefault="qualified"
>
2. Change your xml to:
<ItemList xmlns="http://tempuri.org/WDWEBSVC.xsd">
Removed the :il after xmlns; this makes all elements within this namespace.
3. Change code to take into account the namespace.
Unfortunately, I don't know how to do this using the System.Xml.Xpath namespace. Is there any reason you're not using the simpler System.Xml classes such XMLNode and XMLDocument?
If you were, you could find the nodes by adding a xmlNamespaceManager:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(MyXmlDocument.NameTable);
nsmgr.AddNamespace("il","http://tempuri.org/WDWEBSVC.xsd");
Change xpath when you search, prefix elements with the namespace tag, and add the namespace manager.
MyXmlDocument.Select ( "/il:ItemList/il:Item" , nsmgr);
========
that's the proper way. The easy improper way is to change everything to the default namespace, but then you lose data integrity.
Last edited by jkmyoung; March 3rd, 2006 at 09:40 AM.
-
March 3rd, 2006, 01:53 PM
#5
cant get C# constructs right to read in an XML file via serialization
this is my xml file i want to read in using .net deserialization
I cna not figure out how to create a C# class or structure that when deserialized, will read this xml file.
1. <?xml version="1.0" encoding="us-ascii" standalone="yes"?>
2. <?xml-stylesheet version='1.0'?>
3. <il:ItemList xmlns:il="http://tempuri.org/WDWEBSVC.xsd">
4. <Item>
5. <strItemName>Ping Nifty Tools</strItemName>
6. <strItemAddress>www.niftytools.com</strItemAddress>
7. </Item>
8. <Item>
9. <strItemName>Html download Nifty Tools</strItemName>
10. <strItemAddress>http://www.niftytools.com</strItemAddress>
11. </Item>
12. <Item>
13. <strItemName>Screen Saver</strItemName>
14. <strItemAddress>http://infodeli.3com.com/index.htm</strItemAddress>
15. </Item>
16. </il:ItemList>
I tried the belowand many other attempts but cant get it right.
public struct structDataForItem {
public string strItemName;
public string strItemAddress;
};
public class ItemList
{
public structDataForItem [] Item;
public ItemList ()
{
Item = new structDataForItem [ 5 ]; <= i know 5 is not correct but an AreaList wont serialize to xml.
}
}
generates the below:
1. <?xml version="1.0" encoding="utf-8"?>
2. <ItemList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3. <Item>
4. <structDataForItem>
5. <strItemName>name0</strItemName>
6. <strItemAddress>address0</strItemAddress>
7. </structDataForItem>
8. <structDataForItem>
9. <strItemName>name1</strItemName>
10. <strItemAddress>address1</strItemAddress>
11. </structDataForItem>
12. <structDataForItem />
13. <structDataForItem />
14. <structDataForItem />
15. </Item>
16. </ItemList>
I DONT WANT the <<structDataForItem> to ever appear in the code. Any ideas in what C# classes/structs would work?
-
October 26th, 2011, 03:05 PM
#6
Re: "element is not declared" when xsd on an xml file
Use the xsd tool to generate an xsd of your xml file. This used to come with VS, but you should be able to download it here http://www.haiders.net/post/Download-xsdexe.aspx
eg. xsd sample.xml 'This will generate samaple.xsd
Now use the same tool to generate the Classes from sample.xsd
eg xsd sample.xsd /c /l:cs 'The will generate the c# classes that serialize/de-serialize your xml file.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|