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>
Не удается воспроизвести (действительно, вы на самом деле не используете расширение в вашем XSLT). Я проверил его, добавив (к XSLT):
<xsl:value-of select="nlbExtension:FormatDateTime(.,'dd MMM yyyy')"/>
и с использованием входного XML:
string xml = new XElement("xml", DateTime.Now).ToString();
, и он работал нормально (я изменился на XMLConvert.TodateTime
, чтобы соответствовать формату XSD путь).
Если есть проблема, это в коде, что вы не показываете нам.
Существует инструмент по имени 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 дата > предмет >
преобразование является
xml version = «1,0» encoding = «ISO-8859-1»? > < 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 ') »/>