简体   繁体   English

XSL转换-命名空间前缀未声明

[英]XSL transformation - Namespace prefix undeclared

I have an XSL file by which I would like to convert an XML file. 我有一个XSL文件,我想通过该文件转换XML文件。 This XML file has been obtained renaming the original file which had .safe extension. 已重命名具有.safe扩展名的原始文件,此XML文件已获得。 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">

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>

I'm trying in this way 我正在尝试这种方式

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

or (if I call this file as an external XML file) 或(如果我将此文件称为外部XML文件)

<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: 在这两种情况下,我都会收到以下错误:

ERROR [main] JAXPSAXProcessorInvoker - Namespace prefix 'safe' is undeclared. 错误[main] JAXPSAXProcessorInvoker-未声明命名空间前缀“安全”。

any suggestions would be really appreciated because I'm a begginner with the XSL transformation. 任何建议都将不胜感激,因为我是XSL转换的入门者。 I'm using a WINDOWS machine with ECLIPSE Version: Mars.2 Release (4.5.2) 我正在使用具有ECLIPSE版本的Windows机器:Mars.2版本(4.5.2)

You must include 您必须包括

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

in your xslt, best at top level: 在您的xslt中,最好在顶层:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM