我有这样的情况:
<List>
<Entry>
<![CDATA[......]]>
</Entry>
<Entry>
<![CDATA[......]]>
</Entry>
...
</List>
CDATA部分包含编码字节。每个条目的cdata都有一个控制字作为第一个单词,它描述了数据进入文件的长度以及要搜索到该文件的数量。例如: 00060000abcdef 将暗示一个包含“abcdef”并且长度为6的文件,其值为0.输出应该是包含abcdef的文件。
XSLT是以某种方式解释CDATA并写入文件的正确选择吗?
使用某种自定义XSLT函数,该函数将进入解析器处理程序来处理此问题:
<xsl:MyFunc></xsl:MyFunc>
有没有办法使用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>
答案 0 :(得分:0)
对于XSLT而言,XML输入是否具有CDATA部分并不重要,XSLT数据模型是节点树,因此将有Entry
个元素,其中包含一个子文本节点文本(例如,使用您的样本
<Entry>
<![CDATA[......]]>
</Entry>
Entry
元素将包含一个文本节点,其中包含换行符后跟一些空格字符,后跟......
后跟换行符后跟一些空格字符。)
然后,您可以使用XSLT和XPath字符串函数处理文本节点的字符串值。
答案 1 :(得分:0)
- XSLT是以某种方式解释CDATA并写入的正确选择 到文件?
醇>
是的,CDATA只是(文本节点的一部分),并作为任何其他文本节点处理。
是的,XSLT 2.0 xsl:result-document
指令用于写入(可能有很多不同的)文件。
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-each
,xsl:if
,xsl:choose
,xsl:when
,xsl:otherwise
,......等等。
XPath 2.0(在XSLT 2.0中使用)xas自己的for
,if
then
else
,return
条款