2013-06-12 32 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