2016-08-19 2 views
0

У меня есть текстовый файл, который содержит строковые значения:Преобразование текста в XML-документ

January 
February 
March 

Я хотел бы, чтобы извлечь эти строки из текстового файла и добавить его в XML-документ, смотрите ниже:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
<suite name="Suite" parallel="none">  
    <test name="Test" preserve-order="true">  
     <classes> 
      <class name="January"/> 
      <class name="February"/> 
      <class name="March"/> 
     </classes> 
    </test> 
</suite> 

Я не уверен, какой процесс должен быть реализован для получения вышеуказанного результата, пожалуйста, помогите?

ответ

1

Использование XSLT 3.0 (как доступны с саксонской 9.7 PE и EE) или с помощью Exselt можно использовать

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:math="http://www.w3.org/2005/xpath-functions/math" 
    exclude-result-prefixes="xs math" 
    version="3.0"> 

    <xsl:output method="xml" doctype-system="http://testng.org/testng-1.0.dtd" indent="yes"/> 

    <xsl:template name="main"> 
     <suite name="Suite" parallel="none">  
      <test name="Test" preserve-order="true">  
       <classes> 
        <xsl:apply-templates select="unparsed-text-lines('input.txt')"/> 
       </classes> 
      </test> 
     </suite>   
    </xsl:template> 

    <xsl:template match=".[. instance of xs:string]"> 
     <class name="{normalize-space()}"/> 
    </xsl:template> 
</xsl:stylesheet> 

Использование XSLT 2.0, как доступный с Saxon 9 или XmlPrime или Altova можно использовать

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

    <xsl:output method="xml" doctype-system="http://testng.org/testng-1.0.dtd" indent="yes"/> 

    <xsl:template name="main"> 
     <suite name="Suite" parallel="none">  
      <test name="Test" preserve-order="true">  
       <classes> 
        <xsl:for-each select="tokenize(unparsed-text('input.txt'), '\r?\n')"> 
         <class name="{normalize-space()}"/> 
        </xsl:for-each> 
       </classes> 
      </test> 
     </suite>   
    </xsl:template> 

</xsl:stylesheet> 
+0

при запуске этого преобразования XSL в Eclipse. Я получаю следующую ошибку: FATAL [main] Main - Нет встроенной инструкции стилей для файла: file:/C: /xlstexample1/stylesheet.xml. – adz

+0

Как сказано, таблицы стилей XSLT 2.0 соответственно 3.0, поэтому вам нужно использовать Saxon 9 для их запуска и убедитесь, что исходный шаблон установлен как 'main'. –

+0

Насколько я понимаю, main.xml должен быть пустым файлом? который будет заполнен файлом преобразования XSLT? – adz

-1

Если я понял вас, единственное, что здесь меняется, это имена классов.

Я создал простой скрипт, который разбивает все строки запятой и создает отдельные классы.

Вам просто нужно скопировать текст из документа и добавить его в новую переменную, а сценарий сделает все остальное.

<script> 
 
var text = "example variable with some text"; 
 
var partsOfStr = text.split(' '); 
 
for(i=0; i<partsOfStr.length; i++){ 
 
\t document.write("&lt;class name=&quot;"+partsOfStr[i]+"&quot;/&gt;<br>"); 
 
} 
 
</script>

+0

Я боюсь, что этот код проявляет классическую ошибку, когда вы пытаетесь написать XML «вручную»: вы забываете избегать специальных символов, таких как кавычки, угловые скобки и амперсанды. Огромное количество вопросов StackOverflow представлено пользователями, которые получили плохой XML, который был создан небрежным кодом, подобным этому. –

Смежные вопросы