将XML转换为XSL问题

时间:2014-06-20 10:21:38

标签: xml web-services xslt soap

我是Web服务/ soap / XML和XSLT的新版本,并且已经接近掌握了它的基础知识,但是当我陷入困境时,我可以真正做一些指导/帮助。

我有一个Web服务,可以将信息提取到响应中(使用SharePoint工作流程)

来自请求的回复 -

<!-- language: XML -->
  <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
   <GetHouseholdByRefResponse xmlns="http://schemas.*****.co.uk/*****/****/**">
    <GetHouseholdByRefResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <ErrorCode>0</ErrorCode>
    <ErrorMessage i:nil="true" />
    <Success>true</Success>
    <Household>
      <UserFieldList />
      <CaseWorkerContactName></CaseWorkerContactName>
      <CaseWorkerContactTelNo></CaseWorkerContactTelNo>
      <CompanyCode>001                 </CompanyCode>
      <ContactKey>00000</ContactKey>
      <CorrespondenceAddress />
      <CorrespondenceDesignation></CorrespondenceDesignation>
      <CorrespondencePostCodeValue i:nil="true" />
      <CorrespondencePreamble></CorrespondencePreamble>
      <Description>Joe Bloggs </Description>
      <DisplayCompanyCodes></DisplayCompanyCodes>
      <EmailAddress></EmailAddress>
      <ForwardingAddress />
      <ForwardingDesignation></ForwardingDesignation>
      <ForwardingPostCodeValue i:nil="true" />
      <ForwardingPreamble></ForwardingPreamble>
      <Id>000000000</Id>
      <IsVulnerable>false</IsVulnerable>
      <NextOfKinAddress />
      <NextOfKinDesignation></NextOfKinDesignation>
      <NextOfKinName></NextOfKinName>
      <NextOfKinPhone></NextOfKinPhone>
      <NextOfKinPostCodeValue i:nil="true" />
      <NextOfKinPreamble></NextOfKinPreamble>
      <NumberOfChildren>0</NumberOfChildren>
      <PostCodeValue>AB1 C23  </PostCodeValue>
      <PropertyReference i:nil="true" />
      <Reference>000000000   </Reference>
      <ReferralContactName></ReferralContactName>
      <ReferralContactTelNo></ReferralContactTelNo>
      <Size>1</Size>
    </Household>
  </GetHouseholdByRefResult>
   </GetHouseholdByRefResponse>
  </s:Body>
</s:Envelope>

正如你所看到的那样,它返回了很多信息,大多数我都不需要,所有我想做的事情我都会选择某个元素,例如 description

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

                     <xsl:output method="xml" encoding="utf-    8" indent="no"/>

                     <xsl:template match="/">
                        <xsl:value-of select="Description"/>
                     </xsl:template>

                    </xsl:stylesheet>

我什么都没回来,就像没有描述一样。我知道有一个描述,当我测试以下代码时,它将整个结果转换为字符串,这表明我在尝试指定一个元素时遇到了一些XSL语言错误         

                     <xsl:output method="xml" encoding="utf-    8" indent="no"/>

                     <xsl:template match="/">
                        <xsl:value-of select="*"/>
                     </xsl:template>

                    </xsl:stylesheet>

非常感谢任何帮助

此外,如果有任何人在这个问题上有好处,我很想听听你是否可以推荐任何资源来学习这个。 感谢

1 个答案:

答案 0 :(得分:1)

是的,一个描述,但是(1)它不是/根节点的子节点,(2)它和它的祖先有名称空间< / em>在解决它们时需要定义和使用,例如:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:x="http://schemas.*****.co.uk/*****/****/**"
exclude-result-prefixes="s x">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <output>
        <xsl:value-of select="s:Envelope/s:Body/x:GetHouseholdByRefResponse/x:GetHouseholdByRefResult/x:Household/x:Description"/>
    </output>
</xsl:template>

</xsl:stylesheet>