尝试在commerce server 2009中查找XSLT的XML
我试图从XML中获取XPath,以便使用XSLT从XML中检索数据。我的问题是我看不到XML,需要它在XSLT中提供XPath。我如何知道哪个XSLT使用哪个XML。我正在研究商务服务器2009的搜索Web部件 Tsheten 我感觉到你的痛苦。首先,让我帮助您更好地了解正在使用的SharePoint扩展工具包的体系结构。正如您可能已经看到的,在扩展性工具包中,有两个主要项目控制搜索的执行以及结果的转换和表示 控制器层 如果打开Microsoft.Commerce.sln解决方案,请导航到门户>公用>控制器文件夹。在这里,您将看到包含用于创建和执行CRUD操作的代码的所有控制器(CuffcQueAudio、CurruteUpDead、CurrdSeleTeleTM和CurreCeCeRead)。 在SearchController.cs中,您将看到一个名为DoProductQuerySearch的方法。此方法负责通过Cudio基金会执行产品查询。请参阅下面的代码片段,以了解我所说的示例:尝试在commerce server 2009中查找XSLT的XML,xml,xslt,Xml,Xslt,我试图从XML中获取XPath,以便使用XSLT从XML中检索数据。我的问题是我看不到XML,需要它在XSLT中提供XPath。我如何知道哪个XSLT使用哪个XML。我正在研究商务服务器2009的搜索Web部件 Tsheten 我感觉到你的痛苦。首先,让我帮助您更好地了解正在使用的SharePoint扩展工具包的体系结构。正如您可能已经看到的,在扩展性工具包中,有两个主要项目控制搜索的执行以及结果的转换和表示 控制器层 如果打开Microsoft.Commerce.sln解决方案,请导航到门户>
/// <summary>
/// Performs a product query search.
/// </summary>
/// <param name="catalogName">The catalogName</param>
/// <param name="categoryName">The categoryName</param>
/// <param name="requiredProperties">The required product properties</param>
/// <param name="searchPhrase">The search phrase</param>
/// <param name="whereClause">The where clause</param>
/// <param name="orderKey">The property by which the search results should be sorted.</param>
/// <param name="sortOrder">The direction by which the search results should be sorted.</param>
/// <param name="recordIndex">The index of the first result to return</param>
/// <param name="recordsPerPage">The number of records to return.</param>
/// <param name="totalResultCount">An out parameter for the totalResultCount. That is, the total number of hits for the search.</param>
/// <returns>A list of Products.</returns>
public static List<Product> DoProductQuerySearch(string catalogName, string categoryName, List<string> requiredProperties, string searchPhrase, string whereClause, string orderKey, Microsoft.Commerce.Contracts.Messages.SortDirection sortOrder, int recordIndex, int recordsPerPage, out int totalResultCount)
{
List<Product> products = new List<Product>();
var query = new CommerceQuery<CatalogEntity, CommerceCatalogFullTextSearchBuilder>();
query.SearchCriteria.Catalogs.Add(catalogName);
query.SearchCriteria.FirstItemIndex = recordIndex;
query.SearchCriteria.FullTextSearchType = CommerceFullTextSearchType.FreeText;
query.SearchCriteria.NumberOfItemsToReturn = recordsPerPage;
query.SearchCriteria.ReturnTotalItemCount = true;
调试w3wp.exe工作进程,当您遇到此断点时,将productXml.ToString()添加到监视窗口,并更改Visual Studio中的查看器,以允许您以XML形式查看监视窗口中的输出。然后将xml复制到记事本。这将允许您在编程XSLT模板中的更改时使用示例XML输出,以便XPath正确地遍历DOM
更新了对“CANBEDOWNLOADED属性未返回”的响应
搜索Web部件检索到的搜索属性由产品属性选取器控制,该选取器通过导航到SharePoint网站的专用网站Intranet版本,并从Web部件属性菜单中选择“修改共享Web部件”找到。在那里,您将找到一个区域来指定在产品查询中应该返回哪些属性。
当搜索控制器执行doBufftQuyReQuess时,更改活动属性以有效地更改产品Cube实体从Cuffic基金会请求的属性。XSLT很可能失败,因为要返回集合的属性不包含CanBeDowloaded属性,因为web部件没有将其传递回控制器。我将在SearchController.DoProductQuerySearch中放置一个断点,并查看传入的属性。在紧跟在下面一个断点之后的行上放置断点:
var query = new CommerceQuery<CatalogEntity, CommerceCatalogFullTextSearchBuilder>();
var query=new CommerceQuery();
然后,将query.Model.Properties添加到调试器的“监视”窗口中,并查看您在XPATH语句中查找的属性是否实际设置为返回。如果您要在另一个Web部件中返回该属性,则意味着您在MetaDataDefinitions.xml文件中对该属性的配置是正确的,因此这不是罪魁祸首。很可能是因为您的web部件未正确配置,无法在产品查询中请求CanBeDownloaded属性。您可以在web部件属性中更改它。上面的帖子有。如果您使用的是默认扩展工具包,那么您应该能够使用产品选择器简单地添加它。您必须展示您的XML、XSLT和XPath工作。这样别人才能帮助你。如果不展示你的作品,没有人能帮助你。非常感谢你!我正在努力。当我使用PartSearchWebPart时,我使用的是Xpath,我也想在SearchWebPart上使用相同的Xpath,但它不起作用。我想可能是我使用了错误的Xpath,所以我想看看XML。我的方法可能是错误的,如果你有任何想法,请让我知道。再次感谢你的帮助。令人惊叹的!!谢谢!!如何在web部件中添加CanBeDownloaded属性?我是这项技术的新手,所以请原谅我问了一些愚蠢的问题。
private string OutputProducts()
{
StringBuilder xmlSb = new StringBuilder(this._products.Count * 512);
xmlSb.Append(XmlElementStartOpen); // <
xmlSb.Append(XmlRootNodeName);
xmlSb.Append(XmlElementStartClose); // >
foreach (Product item in this._products)
{
this.OutputCatalogItem(xmlSb, item);
}
xmlSb.Append(XmlElementEndOpen); // </
xmlSb.Append(XmlRootNodeName);
xmlSb.Append(XmlElementEndClose); // >
return xmlSb.ToString();
}
private void OutputCatalogItem(StringBuilder xmlSb, ICommerceEntity catalogItem, string xmlNodeName)
{
System.Diagnostics.Debug.Assert(xmlSb != null, "The value of xmlSb should never be null.");
xmlSb.Append(XmlElementStartOpen); // <
xmlSb.Append(xmlNodeName);
xmlSb.Append(" ");
xmlSb.Append(Product.PropertyName.Id);
xmlSb.Append(XmlAttributeEqualAndQuote); // ='
xmlSb.Append(catalogItem.Properties[Product.PropertyName.Id]);
xmlSb.Append(XmlAttributeQuote); // '
xmlSb.Append(XmlElementEndClose); // >
this.OutputProperties(xmlSb, catalogItem, this._productProperties);
this.OutputRelatedCatalogItems(xmlSb, catalogItem, HierarchicalCatalogEntity.RelationshipName.CrossSells, XmlCrossSellsNodeName);
this.OutputRelatedCatalogItems(xmlSb, catalogItem, HierarchicalCatalogEntity.RelationshipName.UpSells, XmlUpSellsNodeName);
this.OutputRelatedCatalogItems(xmlSb, catalogItem, HierarchicalCatalogEntity.RelationshipName.KitContents, XmlKitContentsNodeName);
this.OutputCategoryProducts(xmlSb, XmlCategoryProductsNodeName);
this.OutputRelatedCatalogItems(xmlSb, catalogItem, Product.RelationshipName.Variants, XmlVariantsNodeName);
this.OutputPersonalNotes(xmlSb);
xmlSb.Append(XmlElementEndOpen); // </
xmlSb.Append(xmlNodeName);
xmlSb.Append(XmlElementEndClose); // >
xmlSb.ToString();
}
**this.RenderResults(xsltArgList, productXml.ToString());**
var query = new CommerceQuery<CatalogEntity, CommerceCatalogFullTextSearchBuilder>();