【问题标题】:Convert text to elements in XML using XSLT使用 XSLT 将文本转换为 XML 中的元素
【发布时间】:2013-06-12 09:58:05
【问题描述】:

我目前正在将 XML 从一个 CMS 迁移到另一个,并且需要将一些文本转换为元素。由于系统的工作原理,一些编辑器只能输入转义文本。挑战是替换其中一些转义元素并将它们转换为有效的 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 元素作为输出,所以不会这样做。

【问题讨论】:

  • 您使用哪种 XSLT 处理器?在我看来,正确的方法是使用扩展来解析p 元素的内容,然后将模板应用到解析的节点并根据需要进行转换并序列化回来(对于attention)。然而,这种方法是否可行取决于所使用的 XSLT 处理器以及是否有可用于解析和序列化的扩展。
  • 我通过 AntillesXML 使用 Xalan。解析所有然后序列化返回是一个好主意。我会试试看!

标签: xslt


【解决方案1】:

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

如果不编写一个小工具来读取文本元素之间的字符串,我认为你不能保留它,例如

&lt;button-name&gt;

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

这并不取决于你喜欢的语言,因为应该有很多object-xml parsers available

如果只是更改标签,您还可以将文本的编码切换为

&lt; would turn into -> <

然后过滤 之间的任何内容以交换您想要的内容,例如gui的按钮名称

希望我能给你一个想法..

【讨论】:

  • 感谢您的回答,我对处理器/语言有点不清楚。我希望我可以使用基于模板的 XSLt 解决方案。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多