繁体   English   中英

XslTransform与xml-stylesheet

[英]XslTransform with xml-stylesheet

看起来每个人都说如果你使用XslTransform,你会先调用Load来加载样式表,然后调用Transform来转换它。 但是我有以下XML文件:

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

我想首先加载xml,找到样式表节点,然后调用Load来加载样式表,还是有其他方法可以做到这一点?

<? ... ?> <? ... ?>是处理指令(PI),所以<?xml-stylesheet ... ?>是一个提示如何转换你的xml。 但这不会自动发生。 对这些指令的解释取决于处理器。 如何处理这些信息取决于您的要求:

您可以通过XmlDocument,XDocument,...加载您的xml,PI将被忽略。 您可以根据需要使用xml:按原样使用它,通过您选择的任何xsl转换进行转换,或者检索PI的href -Attribute并使用该转换。

回到原来的问题:如果您希望通过给定的XSLT转换xml,那么工作流程就像您预期的那样:

  • 加载xml
  • 检索href到xslt转换
  • 加载xslt
  • 通过xslt转换xml

您正在加载源xml,加载xslt并将其应用于另一个.NET中支持有限的本机XSLT2所以我建议使用AltovaXML库altova xml ,使用可以在那里找到altova xml online documentaion

XSLT 2.0转换(XML到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");

XSLT 2.0转换(String to 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 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);

实现xml-stylesheet处理指令取决于用户代理。 .NET XML库不是您的程序的用户代理。 所以,是的,您将不得不查看此处理指令并自行加载XSLT。

如果你需要处理这个PI的所有荣耀,你一定要看看W3C的建议 PI可以包含的不仅仅是对样式表的引用(即伪属性)。 如果您正在处理的文档使用PI的每个方面,这可能很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM