我正在努力处理一个需要添加一些大括号的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>
我需要更改的变量在容器/平底锅/输入/网址中生成的文件应如下所示
<?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 的了解。
一切都设置得很好。 只需更改
<xsl:text>replacetext</xsl:text>
自
<xsl:value-of select="concat('{', ., '}')"/>
以将现有的input/url
文本 ( .
( 括起来,并按要求使用{
和}
。
XSLT
下面是完整的 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>