我正在努力处理一个XML文件,我需要在其中添加一些花括号。我已经在使用XSLT(1.0)来生成XML文件。唯一缺少的字符是XML文件中值的{}。
源文件看起来像
<?xml version='1.0' encoding='utf-8'?>
<container>
<pan>
<id>1</id>
<input>
<url>thisfile-1.xml</url>
</input>
<output>
<url>thisoutput-1.txt</url>
</output>
</pan>
<pan>
<id>2</id>
<input>
<url>anotherfile-2.xml</url>
</input>
<output>
<url>oldoutput-2.txt</url>
</output>
</pan>
<pan>
<id>3</id>
<input>
<url>alsofile-3.xml</url>
</input>
<output>
<url>newoutput-3.txt</url>
</output>
</pan>
</container>
我需要更改的变量是在container / pan / input / url中 生成的文件应该看起来像
<?xml version='1.0' encoding='utf-8'?>
<container>
<pan>
<id>1</id>
<input>
<url>{thisfile-1.xml}</url>
</input>
<output>
<url>thisoutput-1.txt</url>
</output>
</pan>
<pan>
<id>2</id>
<input>
<url>{anotherfile-2.xml}</url>
</input>
<output>
<url>oldoutput-2.txt</url>
</output>
</pan>
<pan>
<id>3</id>
<input>
<url>{alsofile-3.xml}</url>
</input>
<output>
<url>newoutput-3.txt</url>
</output>
</pan>
</container>
网址是可变的,只应更改输入网址而不是输出网址。
我尝试了一些字符串替换示例,但实际上它们正在替换内容,我想保留内容并仅添加大括号。 任何想法都会受到赞赏,我现在已经走到了尽头。
我现在使用的XSLT是
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="input/url/text()">
<xsl:text>replacetext</xsl:text>
</xsl:template>
</xsl:stylesheet>
这只取代了输入网址.... 这是我对XSLT的了解。
答案 0 :(得分:2)
你把一切都搞好了。只需改变
<xsl:text>replacetext</xsl:text>
到
<xsl:value-of select="concat('{', ., '}')"/>
根据要求将现有input/url
文字(.
)与{
和}
打包在一起。
这是完整的XSLT,你明智地基于身份转换,加上上面的修复:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="input/url/text()">
<xsl:value-of select="concat('{', ., '}')"/>
</xsl:template>
</xsl:stylesheet>