2013-06-12 48 views
0

我目前正在将XML从一个CMS迁移到另一个,并且需要将某些文本转换为元素。由于系统工作原理,一些编辑只能输入转义文本。挑战是取代一些这些转义元素并将其转换为有效的XML元素。使用XSLT将文本转换为XML中的元素

源文件:

<p>Press the &lt;button-name&gt;Select key &lt;/button-name&gt;to show more information.</p> 
<p>Press the &lt;button-name&gt;Back key&lt;/button-name&gt; to save the 
values.</p> 
<p>When the storage is completed, the &lt;product-name/&gt; machine 
displays:</p> 
<p>&lt;attention&gt; 
&lt;display-text translate="no"&gt;STORAGE COMPLETED 
Press BACK to exit&lt;/display-text&gt; 
&lt;/attention&gt;</p> 

我想做

Replace &lt;button-name&gt; with <gui> 
Replace &lt;button-name&gt; with <kt.in name="custom-name"/> 
Keeping other escaped elements. 

XML我想

<p>Press the <gui>Select key</gui>to 
    show more information.</p> 
<p>Press the <gui>Back key</gui> 
    to save the calibrations values.</p> 
<p>When the storage is completed, the <kt.in name="custom-name"/> machine 
    displays:</p> 
<p>&lt;attention&gt; &lt;display-text translate="no"&gt;STORAGE COMPLETED 
Press BACK to exit&lt;/display-text&gt; 
&lt;/attention&gt;</p> 

我尝试使用基于字符串的搜索和替换,但因为我想正确的XML元素作为输出,这不会做到这一点。

+0

你使用哪种XSLT处理器?在我看来,正确的方法是使用扩展来解析'p'元素的内容,然后将模板应用到解析的节点,并根据需要进行转换并将其序列化(用于'attention')。然而,这种方法是否可行取决于所使用的XSLT处理器以及是否有扩展可用或可用于解析和序列化。 –

+0

我通过AntillesXML使用Xalan。解析所有随后序列化回来是一个好主意。我试试看! – user2477722

回答

0

这可能只能通过基于字符串的搜索和替换 - 这取决于您想要切换到XML的文本“标签”的数量。我看到的更大的问题实际上是将它全部保存在适当的XML元素中。

我不认为你可以不用写一个小工具来读取文本元素之间的字符串,例如

&lt;button-name&gt; 

并将它们复制到一个对象的正确变量中,然后您将其解析为符合XML的元素。

它不真的取决于你喜欢,因为应该有大量的object-xml parsers available

对于刚刚更换标签,你也可以切换文本的编码为

&lt; would turn into -> < 

,然后过滤任何语言在<>之间交换你想要的内容按钮名到gui

希望我能给你一个主意..

+0

感谢您的回答,我对处理器/语言有点不清楚。我希望我可以使用基于模板的XSLt解决方案。 – user2477722