XslTransform с таблицей стилей xml - PullRequest
2 голосов
/ 26 августа 2011

Похоже, все говорят, что если вы используете XslTransform, вы сначала вызовете Load, чтобы загрузить таблицу стилей, а затем вызовите Transform, чтобы преобразовать ее.Однако у меня есть следующий XML-файл:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="some_stylesheet.xsl" ?>
....
</xml>

Предполагается ли сначала загрузить xml, найти узел таблицы стилей, а затем вызвать Load, чтобы загрузить таблицу стилей, или есть другой способ сделать это?

Ответы [ 3 ]

5 голосов
/ 26 августа 2011

<? ... ?> - это инструкции по обработке (PI), поэтому <?xml-stylesheet ... ?> - это подсказка, как преобразовать ваш xml. Но это не происходит автоматически. Интерпретация этих инструкций зависит от процессора. Что делать с этой информацией зависит от ваших требований:

Вы можете загрузить свой XML через XmlDocument, XDocument, ... и PI будет игнорироваться. Вы можете делать с вашим XML все, что вам захочется: использовать его как есть, преобразовать его с помощью любого преобразования xsl по вашему выбору или извлечь href -атрибут PI и использовать это преобразование.

Возвращаясь к исходному вопросу: если вы хотите, чтобы ваш xml трансформировался с помощью данного XSLT, то рабочий процесс будет таким, как вы ожидали:

  • Загрузить xml
  • Извлечение преобразования href в xslt
  • Загрузить xslt
  • Преобразование xml через xslt
2 голосов
/ 26 августа 2011

Вы загружаете исходный xml, загружаете xslt и применяете один к другому. Собственная поддержка XSLT2 в .NET ограничена, поэтому я рекомендую использовать библиотеку AltovaXML altova xml , там можно найти использование altova xmlэлектронная документация

Преобразование XSLT 2.0 (XML в XML) * Преобразование XSLT 2.0 (строка в XML)

// Specify folder (AltovaXMLExamples folder)
// Check if filepath is correct for you
String strExamplesFolder = Environment.GetEnvironmentVariable("ProgramFiles") +   
"\\Altova\\AltovaXML2011\\AltovaXMLExamples\\";

// Create a new AltovaXML instance and access its engines
Altova.AltovaXML.Application AltovaXML = new Altova.AltovaXML.Application();

// Use XSLT2 Engine of AltovaXML to transform simple.xml using CopyInputXSLT2.xsl
Altova.AltovaXML.IXSLT2 AltovaXMLXSLT2 = AltovaXML.XSLT2;
 AltovaXMLXSLT2.InputXMLFileName = strExamplesFolder + "simple.xml";
 AltovaXMLXSLT2.XSLFileName = strExamplesFolder + "CopyInputXSLT2.xsl";
AltovaXMLXSLT2.Execute(strExamplesFolder + "simpleOutputFromXML.xml");
1010 *
// Specify folder (AltovaXMLExamples folder)
// Check if filepath is correct for you
String strExamplesFolder = Environment.GetEnvironmentVariable("ProgramFiles") + 
    "\\Altova\\AltovaXML2011\\AltovaXMLExamples\\";

// Create a new AltovaXML instance and access its engines
Altova.AltovaXML.Application AltovaXML = new Altova.AltovaXML.Application();

// Use XSLT2 Engine of AltovaXML to transform input string using CopyInputXSLT2.xsl
Altova.AltovaXML.IXSLT2 AltovaXMLXSLT2 = AltovaXML.XSLT2;
 AltovaXMLXSLT2.InputXMLFromText = "<?xml version='1.0'?><doc>Hello World</doc>";
 AltovaXMLXSLT2.XSLFileName = strExamplesFolder + "CopyInputXSLT2.xsl";
AltovaXMLXSLT2.Execute(strExamplesFolder + "simpleOutputFromString.xml");

Преобразование XSLT 2.0 (строкав строку)

// Specify folder (AltovaXMLExamples folder)
// Check if filepath is correct for you
String strExamplesFolder = Environment.GetEnvironmentVariable("ProgramFiles") +     
    "\\Altova\\AltovaXML2011\\AltovaXMLExamples\\";

// Create a new AltovaXML instance and access its engines
Altova.AltovaXML.Application AltovaXML = new Altova.AltovaXML.Application();

// Use XSLT2 Engine of AltovaXML to transform input string using CopyInputXSLT2.xsl
Altova.AltovaXML.IXSLT2 AltovaXMLXSLT2 = AltovaXML.XSLT2;
AltovaXMLXSLT2.InputXMLFromText = "<?xml version='1.0'?><doc>Hello World</doc>";
AltovaXMLXSLT2.XSLFileName = strExamplesFolder + "CopyInputXSLT2.xsl";
String strResult = AltovaXMLXSLT2.ExecuteAndGetResultAsString();

// Show result
MessageBox.Show("XSLT 2.0 engine answered: " + strResult);
1 голос
/ 26 августа 2011

Реализация инструкции обработки xml-stylesheet зависит от пользовательского агента. .NET XML библиотека не является агентом пользователя, ваша программа. Так что да, вам придется взглянуть на эту инструкцию по обработке и загрузить XSLT самостоятельно.

Если вам нужно работать с этим PI во всей его красе, вам обязательно следует обратиться к рекомендации W3C . PI может содержать больше, чем просто ссылку на таблицу стилей (то есть псевдоатрибуты). Это может быть важно, если в обрабатываемых вами документах используются все аспекты PI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...