使用 XSL 解析 XML 时出现问题

Posted

技术标签:

【中文标题】使用 XSL 解析 XML 时出现问题【英文标题】:Problems parsing XML with XSL in it 【发布时间】:2011-06-13 22:44:05 【问题描述】:

当尝试从网页读取我的 xml 时,我得到:“错误:在第 8 行,第 23 列:未绑定前缀” 下面是我的xml:

<?xml version="1.0"?>
<outertag>
<innertag sampleattribute="innertagAttribute">
    <Retailer>
        RetailerName:
        <xsl:template match="link">
            <a href="LinkGoesHere">Link</a>
        </xsl:template>
    </Retailer>
</innertag>

关于什么是错的任何想法?我不能在我的 xml 中使用 xsl:template 吗?非常感谢任何帮助。

【问题讨论】:

好问题,+1。有关问题的解释以及简单而简短但完整的解决方案,请参阅我的答案。 :) 正如随后的对话所示,“未绑定前缀”错误只是一个症状;问题的根本原因是您不了解 XSLT 与 XML 的关系。简单的答案是,如果您将 XML 发送到浏览器,NO:您不能简单地在 XML 中包含 XSLT 指令并期望它们被执行。 @Michael Kay:尊敬的 Kay 博士,但您也可以使用 embedded stylesheets 【参考方案1】:

当试图从一个 我得到的网页:“错误:在第 8 行, 第 23 列:未绑定前缀”下面是我的 xml:

<?xml version="1.0"?>
<outertag>
  <innertag sampleattribute="innertagAttribute">
      <Retailer>RetailerName: 
          <xsl:template match="link">
              <a href="LinkGoesHere">Link</a>
          </xsl:template>
      </Retailer>
  </innertag>
</outertag>

关于什么是错的任何想法?我可以吗 不在我的 xml 中使用 xsl:template?

提供的文档格式不正确,错误信息很好地说明了原因:

有一个名为xsl:template的元素,但是整个文档中没有将前缀xsl:绑定到任何命名空间的命名空间声明。

解决方案

通过为 XSLT 名称空间提供名称空间声明,将格式不正确的文本更正为格式正确的 XML 文档:

<outertag>
    <innertag sampleattribute="innertagAttribute">
        <Retailer>RetailerName: 
            <xsl:template match="link"
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                <a href="LinkGoesHere">Link</a>
            </xsl:template>
        </Retailer>
    </innertag>
</outertag>

【讨论】:

不幸的是,它最终没有按我希望的方式工作。您的解决方案最终解决了格式问题,但我无法让 android 识别 xml 中的链接。从我的示例代码中可以看出,我试图让一个带有链接列表的 xml 文件由 Android 解析,并且这些链接仍然是可点击的。你对我如何做到这一点有什么建议吗?现在我一直在使用我不太喜欢的 webview,因为我返回了很多数据。 你应该把它作为一个单独的问题发布。 @BlakeJ,您的问题已得到解答。接受答案并发布另一个问题。您不能即时添加要求。 @BlakeJ:无论何时涉及 XSLT,都必须知道并定义: 1. 要转换的 XML 文档(需要最小的完整 XML)。 2. 1 和 3 中指定的 XML 文档转换所需的确切结果。转换的任何所需规则/属性,例如以何种方式使用哪些输入项来生成输出项。请在一个新问题中指定所有这些。你原来的问题已经完全回答了。请根据 SO 的做法,考虑接受并支持我的回答。

以上是关于使用 XSL 解析 XML 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

“解析 XML 文件时出现异常:文件过早结束。”尝试将 svg 导入 Android Studio

使用 WebLogic 解析 XML 时出现 ClassCastException

处理 POM 时出现 Maven 错误:[致命] 不可解析的 POM...PITarget 带有保留的 xml 名称

在 Python 中解析 XML 时出现编码问题

读取 xml 时出现地址越界错误

重新加载 UITableview 时出现问题..!