将文本转换为xml文档

时间:2016-08-19 13:53:04

标签: xml xslt

我有一个包含字符串值的文本文件:

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> 

我不确定应该采用哪种流程来获得上述结果,请帮忙?

2 个答案:

答案 0 :(得分:1)

使用XSLT 3.0(与Saxon 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>

使用Saxon 9或XmlPrime或Altova提供的XSLT 2.0,您可以使用

<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>

答案 1 :(得分:-1)

如果我理解你,这里唯一改变的就是班级名称。

我创建了一个简单的脚本,用逗号分隔所有字符串并创建单独的类。

您只需要复制文档中的文本并将其添加到新变量中,脚本将完成剩下的工作。

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