Xpath无法使用XSLT1.0

时间:2015-11-13 23:19:30

标签: xslt xpath

基于此线程,我在其中修复来自sharepoint的响应。

Previous Thread

响应

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <SharepointResponse xmlns="http://test.com.services.generic">
            <Sharepoint_Response>
                <CopyIntoItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
                    <CopyIntoItemsResult>0</CopyIntoItemsResult>
                    <Results>
                        <CopyResult ErrorCode="Success" DestinationUrl="http://archivelink.dev.test.com/enterprise"/>
                    </Results>
                </CopyIntoItemsResponse>
            </Sharepoint_Response>
        </SharepointResponse>
    </Body>
</Envelope>

我正在将其转换为JSONX,我需要<CopyIntoItemsResult>0</CopyIntoItemsResult>

的值
< ErrorCode="Success"

DestinationUrl="http://archivelink.dev.test.com/enterprise"/>

以下是我使用的Xpath 1) CopyIntoItemsResult <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='SharepointResponse']/*[local-name()='Sharepoint_Response']/*[local-name()='CopyIntoItemsResponse']/*[local-name()='CopyIntoItemsResult']/text()"/>

2) ErrorCode /*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='SharepointResponse']/*[local-name()='Sharepoint_Response']/*[local-name()='CopyIntoItemsResponse']/*[local-name()='Results']/*[local-name()='CopyResult']/@*[local-name()='ErrorCode']

3) DestinationUrl /*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='SharepointResponse']/*[local-name()='Sharepoint_Response']/*[local-name()='CopyIntoItemsResponse']/*[local-name()='Results']/*[local-name()='CopyResult']/@*[local-name()='DestinationUrl']

问题是我没有得到任何价值,我无法弄明白我做错了什么?

任何人都可以帮忙。

1 个答案:

答案 0 :(得分:0)

您没有真正展示您的XSLT,但这取决于您的模板匹配。如果您使用了星号(*),那么您的XPath应该可以正常工作。或者,您可以在模板匹配中使用反斜杠(/),但在每个XPath的开头删除它。

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:output version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" />
 <xsl:strip-space elements="*" />

 <xsl:template match="*">
    <data>    
        <CopyIntoItemsResult>
            <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*
                    [local-name()='SharepointResponse']/*[local-name()='Sharepoint_Response']/*
                    [local-name()='CopyIntoItemsResponse']/*
                    [local-name()='CopyIntoItemsResult']/text()"/>
        </CopyIntoItemsResult>
        <ErrorCode>
            <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*
                    [local-name()='SharepointResponse']/*[local-name()='Sharepoint_Response']/*
                    [local-name()='CopyIntoItemsResponse']/*[local-name()='Results']/*
                    [local-name()='CopyResult']/@*[local-name()='ErrorCode']"/>
        </ErrorCode>
        <DestinationUrl>    
            <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*
                    [local-name()='SharepointResponse']/*[local-name()='Sharepoint_Response']/*
                    [local-name()='CopyIntoItemsResponse']/*[local-name()='Results']/*
                    [local-name()='CopyResult']/@*[local-name()='DestinationUrl']"/>
        </DestinationUrl>
    </data>
 </xsl:template>

</xsl:transform>

<强>输出

<data>
    <CopyIntoItemsResult>0</CopyIntoItemsResult>
    <ErrorCode>Success</ErrorCode>
    <DestinationUrl>http://archivelink.dev.test.com/enterprise</DestinationUrl>
</data>