我们使用的产品之一是能够以XML格式输出配置信息,但是,在该输出文件中,它们不是包含实际的主机标识符(名称),而是为每个标识符使用一种GUID引用。 / p>
我制作了一个包含"映射"的XML文件。主机标识符GUID和实际主机标识符(查找)之间,我想实现一个XSLT,它将通过配置文件并用主机标识符名称替换所有主机标识符GUID,它将从其他XML查找我创建的文件(lookup.xml)。
这里是lookup.xml文件的样子:
<?xml version="1.0"?>
<hostids>
<hostid name="e687903c-d185-4560-9117-c60f386b76c1">Agent</hostid>
<hostid name="b9230962-13ca-4d23-abf8-d3cd1ca4dffc">test2</hostid>
</hostids>
以下是配置文件的样子(我通过一些处理来运行原始文件以获得此功能):
<?xml version="1.0"?>
<resources>
<resource><host>e687903c-d185-4560-9117-c60f386b76c1</host><url>/console/**</url></resource>
<resource><host>b9230962-13ca-4d23-abf8-d3cd1ca4dffc</host><url>/ServiceByName</url></resource>
</resources>
以下是输出的样子:
<?xml version="1.0"?>
<resources>
<resource><host>Agent</host><url>/console/**</url></resource>
<resource><host>test2</host><url>/ServiceByName</url></resource>
</resources>
我正在使用RedHat机器上的xsltproc,我认为这是XSLT 1.0。
我试图让我使用我在这里找到的几个不同的示例XSLT,例如:
XSLT "replace" values with another file matching by attribute
但是还没有能够让他们中的任何一个工作。
任何人都可以提供可能能够实现此目的的XSLT 1.0示例吗?
P.S。这是另一个有示例的线程,XSLT 1.0示例对我来说不起作用。当我运行它(在修改以匹配我的元素名称等)之后,看起来它只是将整个原始XML包装在其中。
How to use attribute values from another XML file as an element value selection in the current XML
答案 0 :(得分:1)
以这种方式试试吗?
XSLT 1.0
counterContainer
或者,如果您愿意:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="path-to-lookup" select="'lookup.xml'" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="host">
<xsl:copy>
<xsl:value-of select="document($path-to-lookup)/hostids/hostid[@name = current()]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>