XSLT解释cdata并写入文件

时间:2012-09-15 15:57:56

标签: file xslt cdata

我有这样的情况:

<List>
     <Entry>
     <![CDATA[......]]>
     </Entry>
     <Entry>
     <![CDATA[......]]>
     </Entry>
     ...
</List>

CDATA部分包含编码字节。每个条目的cdata都有一个控制字作为第一个单词,它描述了数据进入文件的长度以及要搜索到该文件的数量。例如: 00060000abcdef 将暗示一个包含“abcdef”并且长度为6的文件,其值为0.输出应该是包含abcdef的文件。

XSLT是以某种方式解释CDATA并写入文件的正确选择吗?

  1. 我可以想到使用redirect:在Xalan中编写
  2. 使用某种自定义XSLT函数,该函数将进入解析器处理程序来处理此问题:

    <xsl:MyFunc></xsl:MyFunc>
    
  3. 有没有办法使用for,if等将自定义XSLT函数编写为标记?

  4. 在Dimitre Novatchev的反馈后编辑:

    感谢您的回复!我希望以下澄清这个问题。遗憾。

    输入XML文件:

    <File>
      <Chunk>
          <Offset>200</Offset>
          <Length>100</Length>
          <Data>
              <![CDATA[data bytes that can be greater than 100 too, but first 100 is valid.]]>
          </Data>
      </Chunk>
      ...
    </File>
    

    输出应该是一个包含以下内容的html文件:

    <html>
       <body>
           <a href="resulting_file">file</a>
       </body>
    </html>
    

2 个答案:

答案 0 :(得分:0)

对于XSLT而言,XML输入是否具有CDATA部分并不重要,XSLT数据模型是节点树,因此将有Entry个元素,其中包含一个子文本节点文本(例如,使用您的样本

 <Entry>
 <![CDATA[......]]>
 </Entry>

Entry元素将包含一个文本节点,其中包含换行符后跟一些空格字符,后跟......后跟换行符后跟一些空格字符。)

然后,您可以使用XSLT和XPath字符串函数处理文本节点的字符串值。

答案 1 :(得分:0)

  
      
  1. XSLT是以某种方式解释CDATA并写入的正确选择   到文件?
  2.   
  1. 是的,CDATA只是(文本节点的一部分),并作为任何其他文本节点处理。

  2. 是的,XSLT 2.0 xsl:result-document指令用于写入(可能有很多不同的)文件。

  3.   

    0.2。使用某种自定义XSLT函数将进入解析器   处理这个的处理程序:

         

    <xsl:MyFunc></xsl:MyFunc>

    是的,这是使用标准XSLT 2.0指令xsl:function

    完成的
    3.Is there a way to write custom XSLT functions as tags using for, if etc.?
    

    这个问题不明确。 XSLT有很多这样的说明,例如 xsl:for-eachxsl:ifxsl:choosexsl:whenxsl:otherwise,......等等。

    XPath 2.0(在XSLT 2.0中使用)xas自己的forif then elsereturn条款