我有这个original.xml 文件树:
<?xml version="1.0"?>
<root xmlns="http://www.tibco.com/xmlns/">
<element1>
<name>Hi</name>
</element1>
<element2>
<name>Beer</name>
</element2>
<element2>
<name>Balloon</name>
<element2_1>
<name>John</name>
</element2_1>
</element2>
</root>
我正在尝试在 element2 父级下添加 element2_2 。我尝试基于“xsl:element match”进行插入(xslt样式表作为脚本的一部分),如下所示:
cat <<EOT > insert.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root/element2[@name='Balloon']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
<xsl:element name="element2_2">
<xsl:attribute name="name">Edward</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
EOT
然后使用xsltproc根据Linux上的特定位置(标签和元素)将insert.xsl插入到original.xml中:
xsltproc insert.xsl original.xml > ./updated.xml
不幸的是什么也没发生。我发现的唯一工作是将匹配模式更改为根(“/*”)并将 xsl:element 编辑为实际的 .xml 元素,这导致在 root 之后连接元素(不是有用的东西)。
期望的输出:
<root>
<element1>
<name>Hi</name>
</element1>
<element2>
<name>Beer</name>
</element2>
<element2>
<name>Balloon</name>
<element2_1>
<name>John</name>
</element2_1>
<element2_2>
<name>Edward</name>
</element2_2>
</element2>
</root>
假设环境之间没有差异。