XSL 转换 - 未声明命名空间前缀 [英] XSL transformation - Namespace prefix undeclared

查看:29
本文介绍了XSL 转换 - 未声明命名空间前缀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 XSL 文件,我想通过它转换一个 XML 文件.此 XML 文件已获得重命名具有 .safe 扩展名的原始文件.在这里你可以看到它的第一行

I have an XSL file by which I would like to convert an XML file. This XML file has been obtained renaming the original file which had .safe extension. here you can see its first lines

<?xml version="1.0" encoding="UTF-8"?>
<xfdu:XFDU xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml" 
xmlns:xfdu="urn:ccsds:schema:xfdu:1" xmlns:safe="http://www.esa.int/safe/sentinel-1.0" xmlns:s1="http://www.esa.int/safe/sentinel-1.0/sentinel-1" 
xmlns:s1sar="http://www.esa.int/safe/sentinel-1.0/sentinel-1/sar" xmlns:s1sarl1="http://www.esa.int/safe/sentinel-1.0/sentinel-1/sar/level-1" 
xmlns:s1sarl2="http://www.esa.int/safe/sentinel-1.0/sentinel-1/sar/level-2" xmlns:gx="http://www.google.com/kml/ext/2.2" 
version="esa/safe/sentinel-1.0/sentinel-1/sar/level-1/slc/standard/iwdp">

假设我想提取值 ASCENDING

let's say I would like to extract the value ASCENDING

<metadataObject ID="measurementOrbitReference" classification="DESCRIPTION" category="DMD">
  <metadataWrap mimeType="text/xml" vocabularyName="SAFE" textInfo="Orbit Reference">
    <xmlData>
      <safe:orbitReference>
        <safe:orbitNumber type="start">11987</safe:orbitNumber>
        <safe:orbitNumber type="stop">11987</safe:orbitNumber>
        <safe:relativeOrbitNumber type="start">15</safe:relativeOrbitNumber>
        <safe:relativeOrbitNumber type="stop">15</safe:relativeOrbitNumber>
        <safe:cycleNumber>83</safe:cycleNumber>
        <safe:phaseIdentifier>1</safe:phaseIdentifier>
        <safe:extension>
          <s1:orbitProperties>
            <s1:pass>ASCENDING</s1:pass>
            <s1:ascendingNodeTime>2016-07-03T17:02:32.742483</s1:ascendingNodeTime>
          </s1:orbitProperties>
        </safe:extension>
      </safe:orbitReference>
    </xmlData>
  </metadataWrap>
</metadataObject>

我正在尝试这种方式

<xsl:template match="/">
<xsl:value-of select="/metadataSection/metadataObject/metadataWrap/xmlData/safe:acquisitionPeriod/safe:startTime" />
</xsl:template>

或(如果我将此文件称为外部 XML 文件)

or (if I call this file as an external XML file)

<xsl:value-of select="document('file:///C:/workspace/S2_XSLtest/S1_XSLtest/NEW_S1manifest.xml')/metadataSection/metadataObject/metadataWrap/xmlData/safe:acquisitionPeriod/safe:startTime" />

在这两种情况下,我都收到以下错误:

in both cases I'm getting the following error:

错误 [main] JAXPSAXProcessorInvoker - 未声明命名空间前缀安全".

ERROR [main] JAXPSAXProcessorInvoker - Namespace prefix 'safe' is undeclared.

任何建议将不胜感激,因为我是 XSL 转换的初学者.我正在使用带有 ECLIPSE 版本的 WINDOWS 机器:Mars.2 Release (4.5.2)

any suggestions would be really appreciated because I'm a begginner with the XSL transformation. I'm using a WINDOWS machine with ECLIPSE Version: Mars.2 Release (4.5.2)

推荐答案

必须包含

xmlns:safe="http://www.esa.int/safe/sentinel-1.0"

在您的 xslt 中,最好在顶级:

in your xslt, best at top level:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:safe="http://www.esa.int/safe/sentinel-1.0" ...

这篇关于XSL 转换 - 未声明命名空间前缀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆