config我想創建一個僅在我的節點的子節點具有特定名稱時才填充/填充的變數,在本例中為deviceName.
這是我的輸入檔案的示例:
<configs>
<config name="CFAAI_CFA2" extends="CFAAI" abstract="true">
<param name="deviceName">CFA2</param>
</config>
</configs>
這是我到目前為止的變數代碼:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="config">
<xsl:text> 		</xsl:text>
<xsl:copy-of select="." />
<xsl:variable name="namePrefix" >
<xsl:choose>
<xsl:when test="/param[@name='deviceName']">
<xsl:value-of select="config/@name"/>
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:if
test="not(contains(@name, 'TRANSFER') or contains(@extends, 'TRANSFER'))">
<xsl:if
test="count(. | //configs/config[starts-with(@name, $namePrefix)][1]) <= 1">
<xsl:if test="not(contains(@name, 'production'))">
<xsl:apply-templates select="."
mode="create_production">
<xsl:with-param name="productionName"
select="concat($namePrefix, '_production')" />
</xsl:apply-templates>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
但是我的代碼目前正在回傳一個空變數。
我希望我的代碼檢查name子節點的屬性是否/param等于deviceName,如果是,我想選擇并回傳其父(config節點)name屬性的值。
關于如何在變數中執行此操作的任何建議?
uj5u.com熱心網友回復:
如果您在的背景關系中config并且您只想在存在的孩子時填充變數param,name請"deviceName"嘗試:
<xsl:variable name="namePrefix" select="@name[../param/@name='deviceName']" />
或者:
<xsl:variable name="namePrefix" select="self::config[param/@name='deviceName']/@name" />
或者,如果您愿意:
<xsl:variable name="namePrefix" select="if (param[@name='deviceName']) then @name else ''" />
select請注意,使用屬性填充變數與使用序列建構式填充變數之間存在差異。在前一種情況下,變數將包含一個值,在后一種情況下是一個節點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495852.html
上一篇:搜索內文并將資料添加到XML檔案
