如何在XSLT中输出具有属性的节点的值



如何获取XSL中具有属性的元素的值?

这是我用来测试代码的示例。

<CD>
<a/> <!--N0#1-->
<b>text</b> <!--NO#2-->
<c YEAR="value"/> <!--NO#3-->
<d name="value" ou="aous">9.90</d> <!--NO#4-->
<e><f>text</f> <!--NO#5-->
<g>text</g></e>
<i><h>text</h> <!--NO#6-->
<h>text</h></i>
</CD>

我希望这个4号零件能给我这样的输出:

"d" : {

"@name" : "value",

"@ou" : "aous",
"VALUE_VARIABLE":"9.90"
}

我遇到的问题是,我无法获得";9.90〃;要素我该怎么做?这是我的代码:

<xsl:for-each select="@*">
<xsl:choose>
<xsl:when test="position()=last()"> <!--check if current attribute is last-->
"@<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>"
</xsl:when>
<xsl:when test="./*"> <!--check if current element has child elements-->
"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>"
</xsl:when>
<xsl:when test="(./*) and not(position()=last())">
"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>",
</xsl:when>
<xsl:otherwise>
"@<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>",
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

编辑-在这里你可以找到完整的代码。

试试这样的东西:

<xsl:variable name="q">"</xsl:variable>
<xsl:variable name="nl">&#xa;</xsl:variable>
<xsl:template match="*[@*]">
<xsl:value select="name()"/>{
<xsl:for-each select="@*">
<xsl:if test="position()!=1">,
</xsl:if>
<xsl:value-of select="concat($q, '@', name(), $q, ' : ', $q, ., $q)"/>
</xsl:for-each>
<xsl:value-of select="concat($q, 'VALUE_VARIABLE', $q, ' : ', $q, ., $q)"/>
</xsl:template> 

当您在属性的上下文中时,您可以使用获取其父元素的字符串值

<xsl:value-of select=".."/>

当然,从父元素本身的上下文中获取它要容易得多,例如:

<xsl:template match="d">
<xsl:text>{"d" : {</xsl:text>
<xsl:for-each select="@*">
<xsl:text>"@</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>", </xsl:text>
</xsl:for-each>
<xsl:text>"VALUE_VARIABLE" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"}}</xsl:text>
</xsl:template>

p。S.

<xsl:when test="./*">

对于属性永远不会为真。


添加:

如果你想让它更通用,可以尝试以下方法:

<xsl:template match="*[@*]">
<xsl:text>{"</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : {</xsl:text>
<xsl:for-each select="@*">
<xsl:text>"@</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="text()">
<xsl:text>, "VALUE_VARIABLE" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:text>}}</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新