【问题标题】:XML XSLT Result-Document fseekXML XSLT 结果文档 fseek
【发布时间】:2012-09-16 07:47:10
【问题描述】:

使用 XSLT 转换我想将一个 XML 文件转换为一个 HTML 文件,该文件又代表另一个文件的各个块,并带有指向所代表文件的链接。

输入 XML 文件:

<File>
  <Name>foo.jpg<Name>
  <Chunk>
      <Offset>200</Offset>
      <Length>100</Length>
      <Data>
          <![CDATA[data bytes, encoded in base64, can be greater than length 100 too, but first 100 decoded bytes are valid.]]>
      </Data>
  </Chunk>
  <Chunk>
  ...
</File>

输出应该是一个 html 文件,该文件具有指向 foo.jpg 的有效链接,即,还有另一个名为“foo.jpg”的隐式输出文件,其中包含来自块中 cdata 部分的数据,位于它们指定的偏移量处。

<html>
   <body>
      <a href="http://example.com/images/foo.jpg">file</a>
   </body>
</html>

Related question

【问题讨论】:

    标签: xslt document fseek


    【解决方案1】:

    这个 XSLT 2.0 转换:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
    
     <xsl:template match="/*">
    
      <xsl:document>
            <html>
               <body>
                  <a href="http://example.com/images/{Name}">file</a>
               </body>
            </html>
      </xsl:document>
    
      <xsl:result-document href="file:///c:/temp/delete/{Name}" method="text">
        <xsl:apply-templates select="Chunk">
         <xsl:sort select="Offset" data-type="number"/>
        </xsl:apply-templates>
      </xsl:result-document>
     </xsl:template>
    
     <xsl:template match="Chunk">
      <xsl:value-of select="substring(Data, 1, Length)"/>
     </xsl:template>
    </xsl:stylesheet>
    

    应用于此 XML 文档时(有两个块):

    <File>
      <Name>foo.jpg</Name>
      <Chunk>
          <Offset>200</Offset>
          <Length>100</Length>
          <Data>A01234567891234567890234567890134567890124567890123567890123467890123457890123456890123456790123456780123456789</Data>
      </Chunk>
      <Chunk>
          <Offset>1</Offset>
          <Length>200</Length>
          <Data>Z0123456789123456789023456789013456789012456789012356789012346789012345789012345689012345679012345678012345678901234567891234567890234567890134567890124567890123567890123467890123457890123456890123456790123456780123456789</Data>
      </Chunk>
    </File>
    

    产生想要的正确结果:

    <html>
       <body><a href="http://example.com/images/foo.jpg">file</a></body>
    </html>
    

    并且创建的文件:c:\temp\delete\foo.jpg 具有正确的所需内容:

    Z0123456789123456789023456789013456789012456789012356789012346789012345789012345689012345679012345678012345678901234567891234567890234567890134567890124567890123567890123467890123457890123456890123456A012345678912345678902345678901345678901245678901235678901234678901234578901234568901234567901234567
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多