当前位置: 首页 > 知识库问答 >
问题:

XSLT命名空间理解[重复]

谢涵煦
2023-03-14

如果我删除所有命名空间和前缀,我的XSLT转换将完美运行。

我曾尝试过几次引入名称空间,但最终总是出现某种错误或没有输出,因此我在这里寻求一些帮助和理解。

我的预期输出,缩减为命名空间和前缀,是:

<?xml version="1.0" encoding="utf-8"?>
<gpx xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0" creator="GSAK"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.groundspeak.com/cache/1/0/1 http://www.groundspeak.com/cache/1/0/1/cache.xsd http://www.gsak.net/xmlv1/6 http://www.gsak.net/xmlv1/6/gsak.xsd"
xmlns="http://www.topografix.com/GPX/1/0">
 <desc>...</desc>
 <author>...</author>
 <wpt lat="..." lon="...">
  <name>...</name>
  ...
  <gsak:wptExtension xmlns:gsak="http://www.gsak.net/xmlv1/6">
    <gsak:DNF>...</gsak:DNF>
    ...
  </gsak:wptExtension>
  <groundspeak:cache id="..." available="..." archived="..." xmlns:groundspeak="http://www.groundspeak.com/cache/1/0/1">
    <groundspeak:name>...</groundspeak:name>
  </groundspeak:cache>
 </wpt>
 <wpt lat="..." lon="...">
   ...
 </wpt>
</gpx>

再次缩减的XML输入是:

<AdventureModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/GamePlayer.Business.WebAPI.Contracts.Models">

  <Message i:nil="..."/>
  <DeepLink>..</DeepLink>
  <Description>...</Description>
  ...
  <GeocacheSummaries>
    <GeocacheSummaryModel>
      <Mode i:nil="..."/>
      <Id>...</Id>
      <Location>
        <Altitude i:nil="..."/>
        <Latitude>...</Latitude>
        <Longitude>...</Longitude>
      </Location>
      ...
    </GeocacheSummaryModel>
    <GeocacheSummaryModel>
      ...
    </GeocacheSummaryModel>
  </GeocacheSummaries>
  ...
</AdventureModel>

为了实现正确的命名空间转换,我需要向XSLT头中添加什么?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  ...
</xsl:stylesheet>

共有1个答案

班建义
2023-03-14

未指定XSLT版本。XSLT 2.0/3.0使命名空间处理更加容易。

这就是它在XSLT 1.0中的工作原理

输入XML具有默认命名空间:

xmlns="http://schemas.datacontract.org/2004/07/GamePlayer.Business.WebAPI.Contracts.Models"

指以下内容:

  • 输入XML中的每个元素都与之绑定

因此XSLT如下所示:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://schemas.datacontract.org/2004/07/GamePlayer.Business.WebAPI.Contracts.Models">

    <xsl:template match="/">
        <xsl:value-of select="a:AdventureModel/a:DeepLink"/>
    </xsl:template>

</xsl:stylesheet>
 类似资料:
  • 我有这个xml是架构版本3.0http://www.test.com/Service/v3。我需要将其降级到版本1http://www.test.com/Service/v1.为此,我使用XSL来转换它。 但我得到这样的结果 在我的输出XML中,我得到了这个 为什么将其添加到NS2:消息中? 它不在输入xml中。 我遗漏了一些东西。如果有人能指出这个问题,我将不胜感激。 我希望在输出中创建以下内容

  • 我试图用XSLT处理器在PHP中转换xml文档,但我无法选择任何内容。。。我认为这是一个名称空间问题。如果我从一个干净的<代码> inputxml: Xsl-file: 我无法更改输入文件,因为它是由其他程序生成的。 安德烈

  • 我尝试像这样解析xml: 我尝试解析这个xml: 但是我的jobNode总是空的。如果我把我的xml改成这样,它就可以工作了:

  • 我是XSLT的新手,命名空间有问题。这是我必须转换的XML: 我正在使用以下XSLT: 结果是: 我试图删除结果输入顺序中的名称空间,但它不适合我。有人能帮我学习XSLT吗?谢谢

  • 我需要一个简单的xslt,它接受输入并提供如下所述的输出。我已经编写了xslt,但名称空间被忽略了。你能帮我一下吗。 输入消息: 预期输出消息: 实际输出消息: XSLT:

  • 我试图将Excel xml文件的一部分呈现为超文本标记语言,以便在翻译(外语翻译)计算机辅助翻译工具中的部分内容时改进预览。 我有以下xml: 我试图从每行中提取第二个数据元素并显示它,但我根本无法显示它。我认为这与名称空间有关,我肯定遗漏了什么,但看不出是什么。这就是我正在使用的: 有人能帮我吗? 我应该补充一点,我正在使用Treebeard来测试这个,它用这些错误验证xml(我无法控制)...