匹配两个不同xml文件中的属性值并替换文本 1. xml
<?xml version="1.0" encoding="UTF-8"?>
<hostids>
<hostid id="001">Agent</hostid>
<hostid id="002">test2</hostid>
</hostids>
2。 XML
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<resource>
<host id="001">jaffar 123</host>
</resource>
<resource>
<host id="002">school 234</host>
</resource>
</resources>
输出:我需要
<hostids>
<hostid id="001">jaffar 123</hostid>
<hostid id="002">school 234</hostid>
</hostids>
答案 0 :(得分:0)
定义一个键<xsl:key name="ref" match="resource/host" use="@id"/>
,然后编写一个模板,检查交叉引用是否存在并替换内容,在XSLT 3中可以使用
<xsl:template match="hostid[key('ref', @id, $doc2)]/text()">{key('ref', ../@id, $doc2)}</xsl:template>
在XSLT 2中你需要
<xsl:template match="hostid[key('ref', @id, $doc2)]/text()">
<xsl:value-of select="key('ref', ../@id, $doc2)"/>
</xsl:template>
在https://xsltfiddle.liberty-development.net/6qM2e2r联机的XSLT 3样本
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
expand-text="yes"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:param name="doc2">
<resources>
<resource>
<host id="001">jaffar 123</host>
</resource>
<resource>
<host id="002">school 234</host>
</resource>
</resources>
</xsl:param>
<xsl:key name="ref" match="resource/host" use="@id"/>
<xsl:template match="hostid[key('ref', @id, $doc2)]/text()">{key('ref', ../@id, $doc2)}</xsl:template>
</xsl:stylesheet>
显然你可以使用<xsl:param name="doc2" select="doc('file2.xml')"/>
从另一个文件中读取第二个文档。