Som den säger, ett id fattas, men eftersom du varken visar dtd, xml eller xslt så är det svårt att hjälpa mera. Tackar tackar Ett vanligt fel med både xpath och xslt är att man glömmer ta hänsyn till namespaces. Om processorn inte hittar elementen i ett namespace som den förväntar sig blir det ingen utdata.. Du ska eventuellt lägga till namespaces-hanteringen i din kod.. Det här med namespace hantering fattar jag inte riktigt ännu men jag har gjort lite labbar och bantat ner filerna. Jag hoppas att detta underlättar om någon vill testa. Ganska svår nöt att knäcka :) eftersom du använder dtd och inte schema så är det inte namespacen det är fel på.. Jag tog en stund på mig att ta bort kod för att försöka utesluta att det är den som strular. Körde också genom xselerator (xsl debugger) och den gav inga varning- eller errormeddelanden. Jag är ganska 100 på att om den gör något så kvarstår problemet. Det är egentligen rätt klart fall..Problem med XmlReaderSettings och XslCompiledTransform
Förstår inte varför det här inte fungerar.
Jag använder t.ex den här raden:
settings.ValidationType = ValidationType.DTD;
Använder jag denna rad så får jag felet:
The 'id' attribute is not declared.
Både jag och min kollega har kollat och vi kan inte hitta något element där id är required att id saknas.
När jag använder den här raden:
settings.ValidationType = ValidationType.None;
Så går det igenom men resultatet (utdatat) blir tomt. Ingenting kommer ut.
Tacksam för hjälp
MVH Andreas
Kod:
public string ParseMyTcml(string tcml)
{
try
{
StreamWriter sw = new StreamWriter("c:\\text.xml");
sw.Write(tcml);
sw.Close();
XslCompiledTransform xslt = new XslCompiledTransform();
FileStream fsxslt = new FileStream("C:\\VBTcmlWizard\\AndyLab.xsl", FileMode.Open, FileAccess.Read);
StreamReader sreader = new StreamReader(fsxslt);
XmlTextReader xtr = new XmlTextReader(sreader);
xslt.Load(xtr);
XsltArgumentList xslArg = new XsltArgumentList();
long pageid = 1;
xslArg.AddParam("pageid", "", pageid);
MemoryStream ms = new MemoryStream();
string sTcml = tcml;
sTcml = sTcml.Replace("\x15", " ");
sTcml = sTcml.Replace("\x12", " ");
sTcml = sTcml.Replace("\x11", " ");
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.None;
settings.XmlResolver = new MyOwnXmlResolver();
StringReader stReader = new StringReader(sTcml);
XmlReader stTcmlReader = XmlReader.Create(stReader, settings);
XPathDocument m_TCMLXPathDocument = new XPathDocument(stTcmlReader);
xslt.Transform(m_TCMLXPathDocument, xslArg, ms);
stTcmlReader.Close();
stReader.Close();
xtr.Close();
fsxslt.Close();
StreamReader reader = new StreamReader(ms);
string rstr = reader.ReadToEnd();
reader.Close();
ms.Close();
return rstr;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
public class MyOwnXmlResolver : XmlUrlResolver
{
public override Uri ResolveUri(Uri baseUri, string relativeUri)
{
if (relativeUri == "tcml.dtd")
{
return new Uri(@"c:\dtdfiler\tcml.dtd");
}
else
{
return null;
}
}
}Sv: Problem med XmlReaderSettings och XslCompiledTransform
Angående tomt utdata så låter det som om du har fel i dina xpath uttryck i xslt:nSv:Problem med XmlReaderSettings och XslCompiledTransform
Jag ska skicka xslt och xml imorgon när jag är på jobbet. :)Sv: Problem med XmlReaderSettings och XslCompiledTransform
Sv:Problem med XmlReaderSettings och XslCompiledTransform
Tacksam för hjälp om detta.
MVH Andreas
***test.tcml***
<?xml version="1.0"?>
<!DOCTYPE tcml SYSTEM "tcml.dtd">
<tcml id="tc-0302004-20d8139470a3">
</tcml>
***test.xsl***
<?xml version='1.0'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
</xsl:stylesheet>
***tcml.dtd***
<!-- tcml version 2.00.000 -->
<!-- generic entities -->
<!ENTITY % TEXT "CDATA" >
<!ENTITY % VALUE "CDATA" > <!-- format: # '.' # ( ',' # '.' # )* ( ',' mm | in | fu | pt | deg | rad )? -->
<!ENTITY % TIME "CDATA" > <!-- format: "yyyy-mm-dd hh:mm:ss.00" -->
<!ENTITY % URL "CDATA" > <!-- format: RFC1738, RFC1808 -->
<!ENTITY % TEXTCONTENT "#PCDATA | softbreak | hardbreak | paragraph | font | color | baseline" >
<!-- tcml -->
<!ELEMENT tcml ( #PCDATA | form )* >
<!ATTLIST tcml
andla %TEXT; #REQUIRED
version %TEXT; #IMPLIED
generator %TEXT; #IMPLIED
created %TIME; #IMPLIED
compressed %TEXT; "no"
>
***källkod***
try
{
//StreamWriter sw = new StreamWriter("c:\\text.xml");
//sw.Write(tcml);
//sw.Close();
StreamReader sr = new StreamReader("c:\\test.tcml");
string tcml = sr.ReadToEnd();
sr.Close();
XslCompiledTransform xslt = new XslCompiledTransform();
//FileStream fsxslt = new FileStream("C:\\VBTcmlWizard\\AndyLab.xsl", FileMode.Open, FileAccess.Read);
FileStream fsxslt = new FileStream("C:\\test.xsl", FileMode.Open, FileAccess.Read);
StreamReader sreader = new StreamReader(fsxslt);
XmlTextReader xtr = new XmlTextReader(sreader);
xslt.Load(xtr);
XsltArgumentList xslArg = new XsltArgumentList();
long pageid = 1;
xslArg.AddParam("pageid", "", pageid);
MemoryStream ms = new MemoryStream();
string sTcml = tcml;
//sTcml = sTcml.Replace("\x15", " ");
//sTcml = sTcml.Replace("\x12", " ");
//sTcml = sTcml.Replace("\x11", " ");
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.XmlResolver = new MyOwnXmlResolver();
StringReader stReader = new StringReader(sTcml);
XmlReader stTcmlReader = XmlReader.Create(stReader, settings);
XPathDocument m_TCMLXPathDocument = new XPathDocument(stTcmlReader);
xslt.Transform(m_TCMLXPathDocument, xslArg, ms);
stTcmlReader.Close();
stReader.Close();
xtr.Close();
fsxslt.Close();
StreamReader reader = new StreamReader(ms);
string rstr = reader.ReadToEnd();
reader.Close();
ms.Close();
return rstr;
}
catch (Exception ex)
{
return ex.Message;
}
-------------------------------------------------
public class MyOwnXmlResolver : XmlUrlResolver
{
public override Uri ResolveUri(Uri baseUri, string relativeUri)
{
if (relativeUri == "tcml.dtd")
{
return new Uri(@"c:\dtdfiler\tcml.dtd");
}
else
{
return null;
}
}
}Sv: Problem med XmlReaderSettings och XslCompiledTransform
däremot har du ju ett xsl som inte gör nåt !?!Sv:Problem med XmlReaderSettings och XslCompiledTransform
Simon får du samma fel som mig?Sv: Problem med XmlReaderSettings och XslCompiledTransform
- i din tcml (eller vad den nu heter har du ett id attribut som du inte definierat i dtd:n
- du har inte angett attributet "andla" som krävs av dtd:n
när du fixat dom båda grejerna, så funkar detSv:Problem med XmlReaderSettings och XslCompiledTransform
Japp du har rätt. Har hamnat rätt nu.