-2

我有这样的情况:

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

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

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

  1. 我可以考虑在 Xalan 中使用 redirect:write
  2. 使用某种自定义 XSLT 函数,该函数将分解为解析器处理程序来处理此问题:

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

根据 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>
4

2 回答 2

0

好吧,对于 XSLT,您的 XML 输入是否有 CDATA 部分并不重要,XSLT 数据模型是一个节点树,因此会有Entry包含文本的单个子文本节点的元素(例如,您的示例

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

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

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

于 2012-09-15T16:29:41.823 回答
0
  1. XSLT 是否是以某种方式解释 CDATA 并写入文件的正确选择?
  1. 是的,CDATA 只是文本节点的(一部分),并作为任何其他文本节点进行处理。

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

.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-each, xsl:if, xsl:choose, xsl:when, xsl:otherwise, ... 等。

XPath 2.0(在 XSLT 2.0 中使用)x 作为它自己的for, if then else,return子句

于 2012-09-15T18:31:10.783 回答