Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用xml样式表进行XslTransform_C#_Xml_Xslt - Fatal编程技术网

C# 使用xml样式表进行XslTransform

C# 使用xml样式表进行XslTransform,c#,xml,xslt,C#,Xml,Xslt,似乎每个人都说如果使用XslTransform,您将首先调用Load加载样式表,然后调用Transform进行转换。但是,我有以下XML文件: <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="some_stylesheet.xsl" ?> .... </xml> .... 我是先加载xml,找到样式表节点,然后调用load来加载样式表,还是有其他

似乎每个人都说如果使用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的提示。但这并不是自动发生的。这些指令的解释取决于处理器。如何处理这些信息取决于您的要求:

您可以通过XmlDocument、XDocument等加载xml。。。PI将被忽略。您可以随心所欲地使用xml:按原样使用,通过您选择的任何xsl转换对其进行转换,或者检索PI的
href
-属性并使用该转换

回到您最初的问题:如果您希望xml由给定的XSLT转换,那么工作流与您预期的一样:

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

    • 实现
      xml样式表
      处理指令取决于用户代理。NET XML库不是用户代理,您的程序是。因此,是的,您必须查看此处理指令并自己加载XSLT


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

      您正在加载源xml、加载xslt并将它们相互应用 NET中对本机XSLT2的支持有限,因此我建议使用AltovaXML库,可以在那里找到用法

      XSLT2.0转换(XML到XML)

      XSLT2.0转换(字符串到XML)

      //指定文件夹(AltovaXMLExamples文件夹)
      //检查文件路径是否适合您
      String strExamplesFolder=Environment.GetEnvironmentVariable(“ProgramFiles”)+
      “\\Altova\\AltovaXML2011\\AltovaXMLExamples\\”;
      //创建新的AltovaXML实例并访问其引擎
      Altova.AltovaXML.Application AltovaXML=新建Altova.AltovaXML.Application();
      //使用AltovaXML的XSLT2引擎使用CopyInputXSLT2.xsl转换输入字符串
      Altova.AltovaXML.IXSLT2 AltovaXMLXSLT2=AltovaXML.XSLT2;
      AltovaXMLXSLT2.InputXMLFromText=“Hello World”;
      AltovaXMLXSLT2.XSLFileName=strExamplesFolder+“CopyInputXSLT2.xsl”;
      AltovaXMLXSLT2.Execute(strExamplesFolder+“simpleOutputFromString.xml”);
      
      XSLT2.0转换(字符串到字符串)

      //指定文件夹(AltovaXMLExamples文件夹)
      //检查文件路径是否适合您
      String strExamplesFolder=Environment.GetEnvironmentVariable(“ProgramFiles”)+
      “\\Altova\\AltovaXML2011\\AltovaXMLExamples\\”;
      //创建新的AltovaXML实例并访问其引擎
      Altova.AltovaXML.Application AltovaXML=新建Altova.AltovaXML.Application();
      //使用AltovaXML的XSLT2引擎使用CopyInputXSLT2.xsl转换输入字符串
      Altova.AltovaXML.IXSLT2 AltovaXMLXSLT2=AltovaXML.XSLT2;
      AltovaXMLXSLT2.InputXMLFromText=“Hello World”;
      AltovaXMLXSLT2.XSLFileName=strExamplesFolder+“CopyInputXSLT2.xsl”;
      字符串strResult=AltovaXMLXSLT2.ExecuteAndGetResultAsString();
      //显示结果
      Show(“XSLT2.0引擎应答:+stresult”);
      
      我真的希望人们在否决票问题上给出理由。这个网站和其他任何东西一样都是帮助人们学习的,如果没有反馈,人们就无法学习,除了投反对票。还有别的方法吗?您需要做什么:使用
      处理指令中指定的样式表处理XML?然后是的,您必须从PI中检索伪属性。或者你的要求是使用其他预先确定的样式表来处理它?顺便说一句,请不要在标题中添加“(C#)”,只是为了对你的问题进行分类。标签做得更好。我很高兴知道他们在说什么的人帮助了这家伙。回答得好+1.如果您指定如何检索href,此答案将更有帮助。既然PI没有真正的属性,那么检索
      href
      伪属性值的好方法是什么?例如,查看关于如何检索PI属性的问题:我看不出这些示例如何解决是否从处理指令中获取样式表名称的问题。
      // 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");
      
      // 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");
      
      // 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);