.NET сценарий Xsl преобразовывает результаты в 'Систему. Объект' не определяется или импортируется

XSL noobie, но крайне застрявший!

У меня есть преобразование, которое форматирует дату с помощью c# пишущий сценарий функции, это хорошо работает, когда я нахожусь в VS 2008 и выполненное "шоу xml вывод", вывод точно, что я хочу.

Однако, когда я пытаюсь выполнить этот использующий код, я получаю ошибку

Предварительно определенный тип 'Система. Объект' не определяется или импортируется

Функционировать для вызова преобразования похоже на это, это является довольно основным и обработанным, прежде чем я начал использовать сценарии

public static string RunXSLT(string xsltFile, string inputXML)
{

    XslCompiledTransform transform = new XslCompiledTransform();
    XsltSettings settings = new XsltSettings();
    settings.EnableScript = true;

    transform.Load(xsltFile, settings, null);

    StringReader sReader = new StringReader(inputXML);
    XmlTextReader xmlTextReader = new XmlTextReader(sReader);

    //Create an XmlTextWriter which outputs to memory stream
    Stream stream = new MemoryStream();
    XmlWriter xmlWriter = new XmlTextWriter(stream,> System.Text.Encoding.UTF8);


    transform.Transform(xmlTextReader, xmlWriter);

    stream.Position = 0;

    XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.Load(stream);

    return XmlDoc.OuterXml;
  }

Преобразование XSL - это..

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
            xmlns:msxsl="urn:schemas-microsoft-com:xslt"
            xmlns:nlbExtension="urn:nlbExtension"
            exclude-result-prefixes="msxsl nlbExtension">

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

<msxsl:script implements-prefix="nlbExtension" language="C#">    
<![CDATA[
  public string FormatDateTime(string xsdDateTime, string format)
  {
      DateTime date = DateTime.Parse(xsdDateTime);

      return date.ToString(format); 
   }
]]>
</msxsl:script>

<xsl:template match="/">
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
  http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" 
  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"

  <xsl:for-each select="./Collection/Content" >
    <url>
      <loc>http://www.nlb.org<xsl:value-of select="./QuickLink/text()"/></loc>
      <lastmod><xsl:value-of select="./DateModified/text()" /></lastmod>
    </url>
  </xsl:for-each>      
</urlset>
</xsl:template>
</xsl:stylesheet>
6
задан Chris 11 January 2010 в 11:26
поделиться

2 ответа

Не удается воспроизвести (действительно, вы на самом деле не используете расширение в вашем XSLT). Я проверил его, добавив (к XSLT):

<xsl:value-of select="nlbExtension:FormatDateTime(.,'dd MMM yyyy')"/>

и с использованием входного XML:

string xml = new XElement("xml", DateTime.Now).ToString();

, и он работал нормально (я изменился на XMLConvert.TodateTime , чтобы соответствовать формату XSD путь).

Если есть проблема, это в коде, что вы не показываете нам.

1
ответ дан 17 December 2019 в 04:47
поделиться

Существует инструмент по имени Animal Sniffer , позволяющий извлечь подпись для API. Затем он может статически проверять, что пользователи API придерживаются подписи, и он может статически проверять, что у реализаторов API все реализовано. Думаю, это хорошо решит вашу проблему.

Вы можете загрузить банку для Animal Sniffer из хранилища codehaus maven: http://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer/

-121--2270283-

Вот более простой пример (извините по поводу опечатки), опять же это работает VS2008 только запуск XML на основе таблицы стилей, но с помощью кода C # I get

Предопределенный тип «System.Object» не определен и не импортирован

Code

 public void RunfileXSLLt
{
//Откройте файл books.xml как XPathDocument.
XPathDocument doc = new XPathDocument («c :\\temp\\raw.xml»);

//Создайте устройство записи для записи преобразованного файла.
GroupWriter Writer = StartWriter.Create («c :\\temp\\OutputTest.xml»);

//Создайте и загрузите преобразование с включенным выполнением сценария.
XslCompiledTransform = новое преобразование XslCompiledTransform ();
Параметры настройки XsltSettings = новые параметры XsltSettings ();
настройки. EnableScript = true;
преобразование. Загрузка («c :\\temp\\Simple.xslt», параметры настройки, null);

//Выполните преобразование.
преобразование. Преобразование (документ, автор);
}

xml - это

 < xml >
< элемент >
< дата > 11/11/2009 
предмет >
< элемент >
< дата > 11/11/2009 
предмет >

преобразование является

 

< xsl: таблица стилей xmlns: xsl = «http://www.w3.org/1999/XSL/Transform» version = «1.0»
xmlns: msxsl = «urn: schemas-microsoft-com: xslt»
xmlns: nlbExtension = «urn: nlbExtension»
exclude-result-prefixes = «msxsl nlbExtension» >
< xsl: метод вывода = «xml» indent = «yes »/>


< msxsl: script реализует-prefix = «nlbExtension» language = «C #» >
 


< xsl: template match = «/» >
< urlset xmlns: xsi = «» http://www.w3.org/2001/XMLSchema-instance
xsi: schemaLocation = "http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd "
xmlns = «http://www.sitemaps.org/schemas/sitemap/0.9» >
< xsl: for-each select =. «/xml/item »>
< url >
< loc > http ://www.a-website.com 
< lastmod >
< xsl: value-of select = «nlbРасширение: FormatDateTime (./date,'s ') »/>




0
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: