PDA

View Full Version : کمک در مورد Menu و XML و XSLT



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 ندارد


ممنون میشم کمکم کنید.