来自不同于WebService的文件的XSLT

来自不同于WebService的文件的XSLT,xslt,Xslt,我正在做一些XSLT——在一个例子中,我有一个序列化为XML文件的服务,我的XSLT将拉取它。在另一种情况下,我有一个Web服务序列化相同的对象。据我所知,输出是相同的。但是XML文件的XQuery/XPath不适用于XML REST服务 例如,请看这张图片,它显示了我从两个源加载一个文档,并为每个源计算相同的路径 这些有什么不同?为什么他们不进行相同的评估 更新 文件中的XML: <?xml version="1.0" encoding="utf-8"?> <Array

我正在做一些XSLT——在一个例子中,我有一个序列化为XML文件的服务,我的XSLT将拉取它。在另一种情况下,我有一个Web服务序列化相同的对象。据我所知,输出是相同的。但是XML文件的XQuery/XPath不适用于XML REST服务

例如,请看这张图片,它显示了我从两个源加载一个文档,并为每个源计算相同的路径

这些有什么不同?为什么他们不进行相同的评估

更新

文件中的XML:

  <?xml version="1.0" encoding="utf-8"?>
<ArrayOfBusinessGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <BusinessGroup>
    <ListofSkills>
      <SkillClass>
        <SkillName>DTE</SkillName>
        <InteractionCount>0</InteractionCount>
      </SkillClass>
      <SkillClass>
        <SkillName>FIN</SkillName>
        <InteractionCount>0</InteractionCount>
      </SkillClass>
      <SkillClass>
        <SkillName>DPS</SkillName>
        <InteractionCount>0</InteractionCount>
      </SkillClass>
      <SkillClass>
        <SkillName>PPD Apps</SkillName>
        <InteractionCount>0</InteractionCount>
      </SkillClass>
      <SkillClass>
        <SkillName>FHD New</SkillName>
        <InteractionCount>0</InteractionCount>
      </SkillClass>
      <SkillClass>
        <SkillName>FHD Existing</SkillName>
        <InteractionCount>0</InteractionCount>
      </SkillClass>
    </ListofSkills>
    <GroupName>Apps Chat</GroupName>
  </BusinessGroup>

DTE
0
鳍
0
每股股息
0
PPD应用程序
0
FHD新
0
现有FHD
0
应用程序聊天
来自Web服务的XML:

    This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ArrayOfBusinessGroup xmlns="http://schemas.datacontract.org/2004/07/ININ.WCF.DeloitteSIC.Models" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<BusinessGroup>
<GroupName>Apps Chat</GroupName>
<ListofSkills>
<SkillClass>
<InteractionCount>2</InteractionCount>
<SkillName>DTE</SkillName>
</SkillClass>
<SkillClass>
<InteractionCount>0</InteractionCount>
<SkillName>FIN</SkillName>
</SkillClass>
<SkillClass>
<InteractionCount>0</InteractionCount>
<SkillName>DPS</SkillName>
</SkillClass>
<SkillClass>
<InteractionCount>0</InteractionCount>
<SkillName>PPD Apps</SkillName>
</SkillClass>
<SkillClass>
<InteractionCount>0</InteractionCount>
<SkillName>FHD New</SkillName>
</SkillClass>
<SkillClass>
<InteractionCount>0</InteractionCount>
<SkillName>FHD Existing</SkillName>
</SkillClass>
</ListofSkills>
</BusinessGroup>
此XML文件似乎没有任何与之关联的样式信息。文档树如下所示。
应用程序聊天
2.
DTE
0
鳍
0
每股股息
0
PPD应用程序
0
FHD新
0
现有FHD

这里的问题是,从Web服务返回的XML使用名称空间,但您的XPath不使用名称空间。要正确使用名称空间,请执行以下操作:

在XSLT顶部声明名称空间(在xsl:stylesheet标记中):

然后,您将使用声明的前缀作为名称的前缀,而不是仅通过名称引用元素:

$skillFile/dc:ArrayOfBusinessGroup/*[starts-with(dc:GroupName, $groupName)]

这里的问题是,从Web服务返回的XML使用的是名称空间,而您的XPath不是。要正确使用名称空间,请执行以下操作:

在XSLT顶部声明名称空间(在xsl:stylesheet标记中):

然后,您将使用声明的前缀作为名称的前缀,而不是仅通过名称引用元素:

$skillFile/dc:ArrayOfBusinessGroup/*[starts-with(dc:GroupName, $groupName)]

你能给我们看一些实际的XML吗?@JLRishe我添加了剪报,来自Web服务的XML来自Chrome中的服务。但是如果你看我在运行时评估路径的图片,它们看起来完全相同,除非我尝试评估:$skillFile/ArrayOfBusinessGroup,文件返回一个节点集,Web服务为空……区别在于,第二个XML片段中的元素位于命名空间中(
http://schemas.datacontract.org/2004/07/ININ.WCF.DeloitteSIC.Models
)虽然第一个代码段中的代码段不是,但这完全解释了您的感受。您是否必须能够处理带有或不带名称空间的XML,或者是否可以将第一个代码段的序列化更改为使用与第二个代码段相同的名称空间?@JLRishe我不明白名称空间为什么重要,代码段的结构文件是一样的,为什么名称空间很重要?哪一个看起来是可行的?如果您在.NET或支持EXSLT的处理器中进行XSLT处理,那么可以在XSLT中执行选项c和d,而不必使用两步过程。您可以向我们展示一些实际的XML吗?@JLRishe I添加了snips,来自Web服务的XML是fr但如果你看我在运行时评估路径的图片,它们看起来完全相同,除非我尝试评估:$skillFile/ArrayOfBusinessGroup,文件返回一个节点集,Web服务为空……区别在于,第二个XML片段中的元素位于命名空间中(
http://schemas.datacontract.org/2004/07/ININ.WCF.DeloitteSIC.Models
)虽然第一个代码段中的代码段不是,但这完全解释了您的感受。您是否必须能够处理带有或不带名称空间的XML,或者是否可以将第一个代码段的序列化更改为使用与第二个代码段相同的名称空间?@JLRishe我不明白名称空间为什么重要,代码段的结构文件是一样的,为什么名称空间很重要?哪一个看起来是可行的?如果您在.NET或支持EXSLT的处理器中进行XSLT处理,可以在XSLT中执行选项c和d,而不必使用两步过程。这是非常值得赞赏的。这是非常值得赞赏的