A.S.Roma
سه شنبه 19 آبان 1388, 10:28 صبح
با سلام
من این کارها رو انجام دادم ببنید چرا جواب نمی گیرم !؟
یکسری دیتای XML دارم که از روی database ساخته می شه با این فرمت :
<?xml version=\"1.0\"?>
<ArrayOfCMSCategoryObject xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<CMSCategoryObject>
<Id>3</Id>
<Name>Name1</Name>
<Parent xsi:nil=\"true\" />
</CMSCategoryObject>
<CMSCategoryObject>
<Id>4</Id>
<Name>Name2</Name>
<Parent xsi:nil=\"true\" />
</CMSCategoryObject><CMSCategoryObject>
<Id>5</Id>
<Name>Name3</Name>
<Parent>3</Parent>
</CMSCategoryObject>
</ArrayOfCMSCategoryObject>
یک کنترل XMLDataSource گذاشتم بدین شکل :
<asp:XmlDataSource ID="srcMenu" runat="server" TransformFile="~/TransformXSLT.xsl"
XPath="MenuItems/MenuItem"></asp:XmlDataSource>
اینم تنظیمات کنترل منو :
<asp:Menu ID="menuSelectCat"
runat="server" Orientation="Horizontal"
DataSourceID="srcMenu" StaticDisplayLevels="1">
<DataBindings>
<asp:MenuItemBinding DataMember="MenuItem"
NavigateUrlField="NavigateUrl"
TextField="Title" ToolTipField="ToolTip" />
</DataBindings>
</asp:Menu>
و در آخر هم محتویات فایل TransformXSLT.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/ArrayOfCMSCategoryObject">
<MenuItems>
<xsl:call-template name="MenuListing" />
</MenuItems>
</xsl:template>
<xsl:template name="MenuListing">
<xsl:apply-templates select="CMSCategoryObject" />
</xsl:template>
<xsl:template match="CMSCategoryObject">
<MenuItem>
<xsl:attribute name="Title">
<xsl:value-of select="Name"/>
</xsl:attribute>
<xsl:attribute name="ToolTip">
<xsl:value-of select = "Name"/>
</xsl:attribute>
<xsl:attribute name="NavigateUrl">
<xsl:text>?Id=</xsl:text>
<xsl:value-of select = "Id"/>
</xsl:attribute>
<xsl:if test="count(CMSCategoryObject) >0">
<xsl:call-template name="MenuListing" />
</xsl:if>
</MenuItem>
</xsl:template>
</xsl:stylesheet>
وقتی اجرا می گیرم به جای اینکه مورد آخر زیر مجموعه اولی شود ، زیر هم میایند !
یعنی عمل Parent کار نمی کند.
طبیعی هم هست چون XML تو در تو ساخته نمی شود.
من از این متد برای تبدیل List<> به XML استفاده می کنم :
public static string SerializeAnObject(object AnObject)
{
XmlDocument XmlDoc = new XmlDocument();
XmlSerializer Xml_Serializer = new XmlSerializer(AnObject.GetType());
MemoryStream MemStream = new MemoryStream();
try
{
Xml_Serializer.Serialize(MemStream, AnObject);
MemStream.Position = 0;
XmlDoc.Load(MemStream);
return XmlDoc.InnerXml;
}
finally
{
MemStream.Close();
}
}
متاسفانه چون با Linq کار می کنم مثل DataSet و ADO.NET متد GetXML ندارد
ممنون میشم کمکم کنید.
من این کارها رو انجام دادم ببنید چرا جواب نمی گیرم !؟
یکسری دیتای XML دارم که از روی database ساخته می شه با این فرمت :
<?xml version=\"1.0\"?>
<ArrayOfCMSCategoryObject xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<CMSCategoryObject>
<Id>3</Id>
<Name>Name1</Name>
<Parent xsi:nil=\"true\" />
</CMSCategoryObject>
<CMSCategoryObject>
<Id>4</Id>
<Name>Name2</Name>
<Parent xsi:nil=\"true\" />
</CMSCategoryObject><CMSCategoryObject>
<Id>5</Id>
<Name>Name3</Name>
<Parent>3</Parent>
</CMSCategoryObject>
</ArrayOfCMSCategoryObject>
یک کنترل XMLDataSource گذاشتم بدین شکل :
<asp:XmlDataSource ID="srcMenu" runat="server" TransformFile="~/TransformXSLT.xsl"
XPath="MenuItems/MenuItem"></asp:XmlDataSource>
اینم تنظیمات کنترل منو :
<asp:Menu ID="menuSelectCat"
runat="server" Orientation="Horizontal"
DataSourceID="srcMenu" StaticDisplayLevels="1">
<DataBindings>
<asp:MenuItemBinding DataMember="MenuItem"
NavigateUrlField="NavigateUrl"
TextField="Title" ToolTipField="ToolTip" />
</DataBindings>
</asp:Menu>
و در آخر هم محتویات فایل TransformXSLT.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/ArrayOfCMSCategoryObject">
<MenuItems>
<xsl:call-template name="MenuListing" />
</MenuItems>
</xsl:template>
<xsl:template name="MenuListing">
<xsl:apply-templates select="CMSCategoryObject" />
</xsl:template>
<xsl:template match="CMSCategoryObject">
<MenuItem>
<xsl:attribute name="Title">
<xsl:value-of select="Name"/>
</xsl:attribute>
<xsl:attribute name="ToolTip">
<xsl:value-of select = "Name"/>
</xsl:attribute>
<xsl:attribute name="NavigateUrl">
<xsl:text>?Id=</xsl:text>
<xsl:value-of select = "Id"/>
</xsl:attribute>
<xsl:if test="count(CMSCategoryObject) >0">
<xsl:call-template name="MenuListing" />
</xsl:if>
</MenuItem>
</xsl:template>
</xsl:stylesheet>
وقتی اجرا می گیرم به جای اینکه مورد آخر زیر مجموعه اولی شود ، زیر هم میایند !
یعنی عمل Parent کار نمی کند.
طبیعی هم هست چون XML تو در تو ساخته نمی شود.
من از این متد برای تبدیل List<> به XML استفاده می کنم :
public static string SerializeAnObject(object AnObject)
{
XmlDocument XmlDoc = new XmlDocument();
XmlSerializer Xml_Serializer = new XmlSerializer(AnObject.GetType());
MemoryStream MemStream = new MemoryStream();
try
{
Xml_Serializer.Serialize(MemStream, AnObject);
MemStream.Position = 0;
XmlDoc.Load(MemStream);
return XmlDoc.InnerXml;
}
finally
{
MemStream.Close();
}
}
متاسفانه چون با Linq کار می کنم مثل DataSet و ADO.NET متد GetXML ندارد
ممنون میشم کمکم کنید.