xml - 使用 XSLT 转换 XML(以前称为 KML)

标签 xml xslt kml

您好,我正在尝试使用 w3schools XSLT Tryit 编辑器转换 KML 文件(另存为 XML 文件),但我似乎无法正常工作。这是我的 XML 文件的片段:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
 <Document>
  <name>Bnsf RR cut</name>
  <open>1</open>
  <Style>
   <ListStyle>
    <ItemIcon>
     <href>kmzicon.png</href>
    </ItemIcon>
   </ListStyle>
  </Style>
  <Folder>
   <name>11/10/11 8:17:20 AM</name>
   <Placemark>
    <name>Track</name>
   </Placemark>
  </Folder>
  <Placemark>
   <name>Gray Mesa</name>
   <description><![CDATA[<img width="800" src="1.jpg"/>]]></description>
   <Point>
    <coordinates>-106.493097,34.446357,1692.000000</coordinates>
   </Point>
  </Placemark>
 </Document>
</kml>

还有我的 XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
      <xsl:for-each select="Document/Placemark">
        <xsl:value-of select="name"/>
        <xsl:value-of select="description"/>
      </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

如果我删除 XML 代码中的 kml 标记,它工作正常,但我宁愿尝试自动化它,而不必从大量 XML 中删除代码。我已经尝试将“kml”添加到我的 XSLT 代码“/kml/Document/Placemark”>,但这不起作用。谢谢!

我希望转换后的 XML 看起来像:

 <Document> 
  <Placemark>
   <name>Gray Mesa</name>
   <description><![CDATA[<img width="800" src="1.jpg"/>]]></description>
   <Point>
    <coordinates>-106.493097,34.446357,1692.000000</coordinates>
   </Point>
  </Placemark>
 </Document>

我认为这对我的目的有用。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2">
   <xsl:template match="/">
  <xsl:for-each select="kml:kml/kml:Document/kml:Placemark">
     <name><xsl:value-of disable-output-escaping="yes" select="kml:name"/></name>
     <description><xsl:value-of disable-output-escaping="yes" select="kml:description"/></description>
  </xsl:for-each>
 </xsl:template>

但是每个名称和描述标签都包含:xmlns:kml="http://www.opengis.net/kml/2.2" 不过,我可以将其与 Access 查询连接起来。不过,当我尝试导入到 Access 时,我确实遇到了错误。它说我需要一个根文件夹,因为我只有很多名称和描述标签。有什么方法可以使用 XSL 添加标签。非常感谢你。抱歉,我一直在编辑这个乱七八糟的问题。

最佳答案

Tim C 对 namespace 的看法是正确的,但我想补充一点,XSLT 是声明性语言,所以通常当我在样式表中看到 for-each 时,它可以被更适合该语言的东西替换。所以我会使用以下代码。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2">
  <xsl:output method="text"/>

   <xsl:template match="/">
      <xsl:apply-templates select="kml:kml/kml:Document/kml:Placemark"/>
   </xsl:template>

   <xsl:template match="kml:Placemark">
         <xsl:value-of select="kml:name"/>
         <xsl:value-of select="kml:description"/>
   </xsl:template>

</xsl:stylesheet>

关于xml - 使用 XSLT 转换 XML(以前称为 KML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195399/

相关文章:

php - 考虑到性能,我应该如何将 XML、JSON 与 MYSQL DB 混合使用

java - 将原始文件(二进制数据)转换为 XML 文件

php - 将默认 "Save as Type"设置为 .kml 而不是 .php

ios - 由于 Style Map,KMLViewer 不会显示轨迹

google-app-engine - 配置 MIME 类型

java - Android:ImageView 位于景观 Activity 的中心

python - Unicode:Python/lxml 文件输出不符合预期(打印与写入)

xml - For-each 位于另一个 For-Each 内,并使用第二个循环的值访问第一个循环中定义的属性

javascript - Grunt - 通过 glob 获取文件名并稍后将其用作变量

html-parsing - 如何防止 PHP::XSLTProcessor 生成 <html> 和 <body> 标签?