【发布时间】:2016-08-02 17:18:57
【问题描述】:
我有以下 xml 文件:
1) 源码.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Name><SSTVal>Name</SSTVal></Name>
<Version><SSTVal>Version</SSTVal></Version>
<Messages>
<Message><SSTVal>Message</SSTVal></Message>
</Messages>
</root>
2) 值.xml
<?xml version="1.0" encoding="UTF-8"?>
<Values>
<SSTVal name="Name">Test Name</SSTVal>
<SSTVal name="Version">1.2.3</SSTVal>
<SSTVal name="Message">Hello World!</SSTVal>
</Values>
我正在尝试编写一个 xslt 文件,它在第一个文件中搜索 SSTVal 的每个匹配项,并将其替换为第二个文件中匹配 SSTVal 的值,因此结果看起来像
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Name>Test Name</Name>
<Version>1.2.3</Version>
<Messages>
<Message>Hello World!</Message>
</Messages>
</root>
到目前为止,我设法编写了以下 xslt 转换,它仅替换一个特定节点,但使用 values.xml 中的所有值
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<!--xsl:output method="xml" indent="yes"/-->
<xsl:strip-space elements="*"/>
<xsl:variable name="vReps" select="document('file:///c:/test/values.xml')"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- replace element text -->
<xsl:template match="SSTVal[text()='Version']">
<xsl:value-of select="$vReps"/>
</xsl:template>
</xsl:stylesheet>
您能帮我更改 xslt 以替换匹配的元素吗? 提前谢谢!
编辑:应使用 XSLT 1.0
【问题讨论】: