XSLT 如何从不同的标签级别访问属性?
Posted
技术标签:
【中文标题】XSLT 如何从不同的标签级别访问属性?【英文标题】:XSLT How to access attribute from different tag level? 【发布时间】:2018-07-31 08:42:01 【问题描述】:我是 xsl 和 xslt 的新手。我正在使用 xslt 进行 xml 到 xml 的转换。我有以下 xml 文件。我正在使用 for-each 循环遍历 REQ-IF/record,在循环内我想迭代 REQ-IF/Attributes/Attribute 以访问 @Name 值。我尝试使用 ../ 但它只提供一个级别的值并且不允许我迭代。你能帮我解决这个问题吗?谢谢。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<REQ-IF>
<record>
<Name>ABC</Name>
<Presentationname>Task Record</Presentationname>
<GUID>123</GUID>
</record>
<record>
<Name>DEF</Name>
<Presentationname>Role Record</Presentationname>
<GUID>456</GUID>
</record>
<record>
<Name>GHI</Name>
<Presentationname>WorkProduct Record</Presentationname>
<GUID>789</GUID>
</record>
<Attributes>
<Attribute>
<Name>Task</Name>
</Attribute>
<Attribute>
<Name>Role</Name>
</Attribute>
<Attribute>
<Name>WorkProduct</Name>
</Attribute>
</Attributes>
</REQ-IF>
【问题讨论】:
您能否发布到目前为止您已经尝试过的内容,并说明您期望的结果以及您得到的结果? 【参考方案1】:有效
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/REQ-IF">
<xsl:for-each select="record">
<xsl:text>
</xsl:text>
<xsl:value-of select="./Name"/>
<xsl:for-each select="../Attributes/Attribute">
<xsl:text>
	</xsl:text>
<xsl:value-of select="Name"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出:
ABC
Task
Role
WorkProduct
DEF
Task
Role
WorkProduct
GHI
Task
Role
WorkProduct
在嵌套循环中,您可能使用了 for-each select="../Attributes" 而不是 for-each select="../Attributes/Attribute"。由于 REQ-IF 只有一个 Attributes 节点,所以只有一个结果。
【讨论】:
以上是关于XSLT 如何从不同的标签级别访问属性?的主要内容,如果未能解决你的问题,请参考以下文章