如何使用 XSLT 复制 XML 并添加到现有文本



我正在努力处理一个需要添加一些大括号的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>

相关内容

  • 没有找到相关文章

最新更新