首页 > 解决方案 > 获取 XML 节点的属性值时出错

问题描述

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

<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>

我收到此错误

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

标签: xmlxsltxpath

解决方案


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

下面的 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

推荐阅读