抱歉,我没有更好的标题,如果我能想到一个更好的方式来说出来,我可能会找到答案: - /
我有一些看起来像
的XML数据<maml:navigationLink>
<maml:linkText>some text</maml:linkText>
<maml:uri />
</maml:navigationLink>
现在在某些情况下,URI是空的,而在其他情况下则不是。如果有URI,则我想将其设为链接,否则只是文本。
我知道我可以使用像这样的选择
<xsl:choose>
<xsl:when test="maml:uri !=''">
<a href="{maml:uri}"><xsl:value-of select="maml:linkText"/></a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="maml:linkText"/>
</xsl:otherwise>
</xsl:choose>
但是我有另一个更复杂的情况,它需要相同的是/否包装,只是它会有一些深度,这会使它更复杂。
更复杂的例子就像是
<parameter required='true' position='true'>
<maml:name>Name</maml:name>
<maml:type>String</maml:type>
</parameter>
我需要结果看起来像
[[-Name] <String>]
最外面的[]是&#34;必需的&#34;标志,内部[]是否是&#39;位置&#39;是真的。
这甚至是对它的全部范围的简化,但这足以显示它的嵌套方面。
做类似的事情是否有某种捷径?
答案 0 :(得分:0)
这是我提出的方法,使用变量和更详细的XML来处理。
这是XML
<command:parameter required="false" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName)" position="1" aliases="ProcessName">
<maml:name>Name</maml:name>
<maml:description>
<maml:para>Specifies one or more processes by process name. You can type multiple process names (separated by commas) and use wildcard characters. The parameter name ("Name") is optional.</maml:para>
</maml:description>
<command:parameterValue required="true" variableLength="true">String[] </command:parameterValue>
</command:parameter>
这是我提出的解决方案。
<xsl:template match="command:parameter" mode="syntax">
<xsl:variable name="pName">
<xsl:choose>
<xsl:when test="@position !='named'">
<xsl:value-of select="concat('[-',maml:name,']')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('-',maml:name)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="pType">
<xsl:if test="command:parameterValue !=''">
<xsl:value-of select="concat(' <', command:parameterValue,'>')"/>
</xsl:if>
</xsl:variable>
<xsl:choose>
<xsl:when test="@required ='true'">
<xsl:value-of select="concat(' ',$pName,$pType)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(' [',$pName,$pType,'] ')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
输出看起来像这样
Get-Process [[-Name] <String[]>] [-ComputerName <String[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]
对于这种更嵌套的情况,该变量是有意义的,但对于URL,如果我使用变量,那么它的代码就差不多了。