我有一个像这样结构的纯文本文件:
!ITEM_NAME Item value !ANOTHER_ITEM Its value ...
是否可以使用类似于XSLT的文件:
<?xml version="1.0" encoding="UTF-8" ?> <document> <ITEM_NAME>Item value</ITEM_NAME> <ANOTHER_ITEM>Its value</ANOTHER_ITEM> ... </document>
编辑
对不起,我以前没有明确说过.我试图使用Visual Studio 2005 XSLT引擎完成此转换.我已经尝试了两种提供的解决方案,我确信这是正确的.但Visual Studio 2005不知道未解析的文本功能.
如果你可以使用XSLT 2.0,你可以使用unparsed-text()…
原文链接:https://www.f2er.com/xml/293032.html!ITEM_NAME Item value !ANOTHER_ITEM Its value !TEST_BANG Here's a value with !bangs!!!
XSLT 2.0(将此XSLT应用于自身(使用样式表作为XML输入).您还必须更改文本文件的路径.您可能还必须更改编码.)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="text-encoding" as="xs:string" select="'iso-8859-1'"/> <xsl:param name="text-uri" as="xs:string" select="'file:///C:/Users/dhaley/Desktop/test.txt'"/> <xsl:template name="text2xml"> <xsl:variable name="text" select="unparsed-text($text-uri,$text-encoding)"/> <xsl:analyze-string select="$text" regex="!(.*)\n(.*)"> <xsl:matching-substring> <xsl:element name="{normalize-space(regex-group(1))}"> <xsl:value-of select="normalize-space(regex-group(2))"/> </xsl:element> </xsl:matching-substring> </xsl:analyze-string> </xsl:template> <xsl:template match="/"> <document> <xsl:choose> <xsl:when test="unparsed-text-available($text-uri,$text-encoding)"> <xsl:call-template name="text2xml"/> </xsl:when> <xsl:otherwise> <xsl:variable name="error"> <xsl:text>Error reading "</xsl:text> <xsl:value-of select="$text-uri"/> <xsl:text>" (encoding "</xsl:text> <xsl:value-of select="$text-encoding"/> <xsl:text>").</xsl:text> </xsl:variable> <xsl:message><xsl:value-of select="$error"/></xsl:message> <xsl:value-of select="$error"/> </xsl:otherwise> </xsl:choose> </document> </xsl:template> </xsl:stylesheet>
XML输出
<document> <ITEM_NAME>Item value</ITEM_NAME> <ANOTHER_ITEM>Its value</ANOTHER_ITEM> <TEST_BANG>Here's a value with !bangs!!!</TEST_BANG> </document>