2012-06-25 138 views
2

我有一个公共网站,我需要显示我在SharePoint中设置的列表视图的简化版本。XSLT和名称空间

我成功使用here上描述的技术来获取视图的XML,但它过于复杂,我无法让我的jQuery AJAX代码正确处理名称空间。

我写了下面的XSLT,但遇到问题。提前原谅,因为我是XSLT新手。

我XLST看起来是这样的:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<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" xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
    xmlns:rs='urn:schemas-microsoft-com:rowset' 
    xmlns:z='#RowsetSchema' 
> 

<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/"> 
    <activeRFPs> 
    <xsl:for-each select="/xml/rs:data/z:row"> 
     <rfp> 
      <title> 
       <xsl:value-of select="@ows_RFP_x0020_Link" /> 
      </title> 
      <applicationStart> 
       <xsl:value-of select="@ows_Application_x0020_Period_x0020_S" /> 
      </applicationStart> 
      <applicationEnd> 
       <xsl:value-of select="@ows_Application_x0020_Period_x0020_E" /> 
      </applicationEnd> 
      <programStart> 
       <xsl:value-of select="@ows_Program_x0020_Start_x0020_Date" /> 
      </programStart> 
      <publicURL> 
       <xsl:value-of select="@ows_Public_x0020_Guidelines_x0020_Do" /> 
      </publicURL> 
     </rfp> 
    </xsl:for-each> 
    </activeRFPs> 
</xsl:template> 
</xsl:stylesheet> 

源XML看起来是这样的:

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
xmlns:rs='urn:schemas-microsoft-com:rowset' 
xmlns:z='#RowsetSchema'> 
<s:Schema id='RowsetSchema'> 
<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'> 
    <s:AttributeType name='ows_RFP_x0020_Link' rs:name='RFP Link' rs:number='1'> 
    <s:datatype dt:type='string' dt:maxLength='512' /> 
    </s:AttributeType> 
    <s:AttributeType name='ows_Application_x0020_Period_x0020_S' rs:name='Application Period Start Date' rs:number='2'> 
    <s:datatype dt:type='datetime' dt:maxLength='8' /> 
    </s:AttributeType> 
    <s:AttributeType name='ows_Application_x0020_Period_x0020_E' rs:name='Application Period End Date' rs:number='3'> 
    <s:datatype dt:type='datetime' dt:maxLength='8' /> 
    </s:AttributeType> 
    <s:AttributeType name='ows_Program_x0020_Start_x0020_Date' rs:name='Program Start Date' rs:number='4'> 
    <s:datatype dt:type='datetime' dt:maxLength='8' /> 
    </s:AttributeType> 
<s:AttributeType name='ows_Public_x0020_Guidelines_x0020_Do' rs:name='Public Guidelines Doc URL' rs:number='5'> 
<s:datatype dt:type='string' dt:maxLength='512' /> 
</s:AttributeType> 
</s:ElementType> 
</s:Schema> 
<rs:data> 
<z:row ows_RFP_x0020_Link='http://www.google.com, Google Search Engine' ows_Application_x0020_Period_x0020_S='2012-06-22 00:00:00' ows_Application_x0020_Period_x0020_E='2012-07-20 00:00:00' ows_Program_x0020_Start_x0020_Date='2012-10-01 00:00:00' ows_Public_x0020_Guidelines_x0020_Do='http://www.yahoo.com' /> 
</rs:data> 
</xml> 

所有值都在Z上的属性:行元素。我有点想到如何使用命名空间。

当我在Visual Studio中运行,所有的输出是:

<?xml version="1.0" encoding="utf-8"?> 

<activeRFPs xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" /> 

我在做什么错?

我想这样的结构:

<rfp> 
<title>value</title> 
<applicationStart>value</applicationStart> 
<applicationEnd>value</applicationEnd> 
... 
</rfp> 
+0

请编辑您的问题表现出更多的传入的XML结构的(目前你只给我们开头的XML声明)和你想要的输出XML结构。 – Utkanos

+0

已更新。谢谢! – user1480836

+0

我不知道你是如何得到这个输出的。当我运行[在XMLPlayground上的代码](http://www.xmlplayground.com/oN4BT0)(请参阅输出源)时,我会得到你想要的输出。 – Utkanos

回答

0

你是如何运行的转换?我得到了.NET 2.0以下输出使用简单的跑步者(加压痕):

<activeRFPs xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> 
    <rfp> 
     <title>http://www.google.com, Google Search Engine</title> 
     <applicationStart>2012-06-22 00:00:00</applicationStart> 
     <applicationEnd>2012-07-20 00:00:00</applicationEnd> 
     <programStart>2012-10-01 00:00:00</programStart> 
     <publicURL>http://www.yahoo.com</publicURL> 
    </rfp> 
</activeRFPs> 

亚军代码是一些样板:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); 
xmlWriterSettings.ConformanceLevel = ConformanceLevel.Fragment; 

XmlReaderSettings xslReaderSettings = new XmlReaderSettings(); 
xslReaderSettings.ProhibitDtd = false; 

XmlReader xmlReader = XmlReader.Create(contentFile, xslReaderSettings); 
XslReader xslReader = XmlReader.Create(transformFile, xslReaderSettings); 
XmlWriter xmlWriter = XmlWriter.Create(outFile, xmlWriterSettings); 

XslCompiledTransform xslt = new XslCompiledTransform(); 
XsltSettings settings = new XsltSettings(); 
settings.EnableDocumentFunction = true; 
settings.EnableScript = true; 
xslt.Load(xslReader, settings, new XmlUrlResolver()); 
xslt.Transform(xmlReader, xmlWriter); 

你甚至都不需要所有的这些设置。