获取XML节点的属性值时出错

时间:2020-07-16 01:24:57

标签: xml xslt xpath

我正在尝试获取属性值,但出现错误

<GetListResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
  <GetListResult>
    <List RootFolder="/something/FileUploadTest">
    </List>
  </GetListResult>
</GetListResponse>

XSLT

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:sp="http://schemas.microsoft.com/sharepoint/soap/" version="1.0">
<xsl:template match="/" name="ShowVariables">
<xsl:copy-of select="/sp:GetListResponse/sp:GetListResult/sp:List/@RootFolder"/>
</xsl:template>
</xsl:stylesheet>

我收到此错误

执行返回了意外错误。 不能在“根”类型的节点内构造“属性”类型的项目。

1 个答案:

答案 0 :(得分:1)

您不能自行创建属性。它不能单独存在。首先应该是父元素。属性仅在元素的上下文中存在。

下面的XSLT创建伪造的文字元素<fafa>。接下来,我们可以创建属性的副本。

XSLT#1

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://schemas.microsoft.com/sharepoint/soap/" exclude-result-prefixes="a">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/" name="ShowVariables">
        <fafa>
            <!--<xsl:copy-of select="/a:GetListResponse/a:GetListResult/a:List/@RootFolder"/>-->
            <xsl:value-of select="a:GetListResponse/a:GetListResult/a:List/@RootFolder"/>
        </fafa>
    </xsl:template>
</xsl:stylesheet>

输出

<fafa>/something/FileUploadTest</fafa>

XSLT#2

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://schemas.microsoft.com/sharepoint/soap/" exclude-result-prefixes="a">
    <xsl:output method="text" />

    <xsl:template match="/" name="ShowVariables">
            <xsl:value-of select="a:GetListResponse/a:GetListResult/a:List/@RootFolder"/>
    </xsl:template>
</xsl:stylesheet>

输出

/something/FileUploadTest