如何为XML创建XSL

时间:2015-05-30 07:33:13

标签: c# xml xslt

在我的C#应用​​程序中,我获得了word document的XML代码,我希望使用XslCompiledTransform将其转换为HTML,就像this answerthis one建议一样。

但问题是如何获取或创建要在此行中使用的XSL样式表:

var myXslTrans = new XslCompiledTransform(); 
myXslTrans.Load("stylesheet.xsl");  //<- How to get this
myXslTrans.Transform("source.xml","result.html");

this tutorial中,它展示了如何为XML创建XSL。但是,对于您拥有的任何XML,是否可以以编程方式执行此操作?

这是我获得的XML文档的示例:

<w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
  w:macrosPresent="no"
  w:embeddedObjPresent="no"
  w:ocxPresent="no"
  xml:space="preserve">
  <w:ignoreSubtree
    w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2" />
  <o:DocumentProperties>
    <o:Author>Soft</o:Author>
    <o:LastAuthor>Soft</o:LastAuthor>
    <o:Revision>1</o:Revision>
    <o:TotalTime>0</o:TotalTime>
    <o:Created>2015-05-12T03:13:00Z</o:Created>
    <o:LastSaved>2015-05-12T03:13:00Z</o:LastSaved>
    <o:Pages>1</o:Pages>
    <o:Words>58</o:Words>
    <o:Characters>336</o:Characters>
    <o:Lines>2</o:Lines>
    <o:Paragraphs>1</o:Paragraphs>
    <o:CharactersWithSpaces>393</o:CharactersWithSpaces>
    <o:Version>12</o:Version>
  </o:DocumentProperties>
  <o:CustomDocumentProperties>
    <o:EDOID
      dt:dt="float">657360</o:EDOID>
  </o:CustomDocumentProperties>
  <w:fonts>
    <w:defaultFonts
      w:ascii="Calibri"
      w:fareast="Calibri"
      w:h-ansi="Calibri"
      w:cs="Arial" />
    <w:font
      w:name="Arial">
      <w:panose-1
        w:val="020B0604020202020204" />
      <w:charset
        w:val="00" />
      <w:family
        w:val="Swiss" />
      <w:pitch
        w:val="variable" />
      <w:sig
        w:usb-0="E0002AFF"
        w:usb-1="C0007843"
        w:usb-2="00000009"
        w:usb-3="00000000"
        w:csb-0="000001FF"
        w:csb-1="00000000" />
    </w:font>
    <w:font
      w:name="Symbol">
      <w:panose-1
        w:val="05050102010706020507" />
      <w:charset
        w:val="02" />
      <w:family
        w:val="Roman" />
      <w:pitch
        w:val="variable" />
      <w:sig
        w:usb-0="00000000"
        w:usb-1="10000000"
        w:usb-2="00000000"
        w:usb-3="00000000"
        w:csb-0="80000000"
        w:csb-1="00000000" />
    </w:font>
    <w:font
      w:name="Cambria Math">
      <w:panose-1
        w:val="02040503050406030204" />
      <w:charset
        w:val="01" />
      <w:family
        w:val="Roman" />
      <w:notTrueType />
      <w:pitch
        w:val="variable" />
      <w:sig
        w:usb-0="00000000"
        w:usb-1="00000000"
        w:usb-2="00000000"
        w:usb-3="00000000"
        w:csb-0="00000000"
        w:csb-1="00000000" />
    </w:font>
    <w:font
      w:name="Calibri">
      <w:panose-1
        w:val="020F0502020204030204" />
      <w:charset
        w:val="00" />
      <w:family
        w:val="Swiss" />
      <w:pitch
        w:val="variable" />
      <w:sig
        w:usb-0="E10002FF"
        w:usb-1="4000ACFF"
        w:usb-2="00000009"
        w:usb-3="00000000"
        w:csb-0="0000019F"
        w:csb-1="00000000" />
    </w:font>
    <w:font
      w:name="B Titr">
      <w:panose-1
        w:val="00000700000000000000" />
      <w:charset
        w:val="B2" />
      <w:family
        w:val="auto" />
      <w:pitch
        w:val="variable" />
      <w:sig
        w:usb-0="00002001"
        w:usb-1="80000000"
        w:usb-2="00000008"
        w:usb-3="00000000"
        w:csb-0="00000040"
        w:csb-1="00000000" />
...
  </w:body>
</w:wordDocument>

更新

阅读评论让我相信无法以编程方式为任何XML文档创建XSL

那么如何才能获得XSl这个特定的XML,这是我的问题? 如果我在Microsoft word中打开此XML,它会显示包含所有样式的真实单词文档。我知道它也有HTML代码。所以我想让HTML代码在Microsoft word

中显示相同的结果

3 个答案:

答案 0 :(得分:2)

  

那么我怎样才能获得这个特定XML的XSL?

使用Microsoft Words XSL文件:
C:\ Program Files \ Microsoft Office \ Office15 \ XML2WORD.XSL

答案 1 :(得分:0)

您不能将XSL参数用于动态工作吗?

https://msdn.microsoft.com/en-us/library/dfktf882%28v=vs.110%29.aspx

您可以传递一些参数来切换一些xsl语句。

答案 2 :(得分:-1)

更新回答:

我们知道XSLT是一个XML文档,我们可以简单地使用xslt attritubes和扩展创建一个xml文件。我们可以遵循这一策略。

... 
XDocument document = documentBuilder.newDocument();

Element rootElement = document.createElement("xsl:stylesheet");
// adding attributes like namespaces etc... 

document.appendChild(rootElement); 
Element em = document.createElement("xsl:template");
em.setAttribute("match", "/"); 
....

这只是一个想法。您可以像这样设计xslt文档并遵循正确的语法。在第一个答案中不理解问题的原理。希望这有帮助