【问题标题】:Why do I get blanks instead of version and date?为什么我得到空白而不是版本和日期?
【发布时间】:2026-01-27 02:20:15
【问题描述】:

我有这个 XML 文件(部分),我需要使用 jQuery 获取版本和修改日期。

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf"
     version="3.0"
     xml:lang="nl"
     unique-identifier="isbn-id"
     prefix="cc: http://creativecommons.org/ns# rendition: http://www.idpf.org/vocab/rendition/# ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/">
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
        <meta refines="#title" property="title-type">main</meta>
        <meta property="ibooks:version">1.0.440</meta>
        <meta property="dcterms:modified">2014-06-08T21:15:17Z</meta>
...

这是从上面的 XML 文件中读取版本和日期的 javascript/jQuery 函数:

$(document).ready(function(){

$.ajax({
type: "GET",
url: "package.opf",
dataType: "xml",
success: function(xml) {
    var opf = $.parseXML( xml );

    $("span#datum").html($(opf).find("meta[property='dcterms:modified']").text());
$("span#versie").html($(opf).find("meta[property='ibooks:version']").text());
  },
error: function(jqHXR, textStatus, errorThrown) {
    console.log(jqHXR);
    console.log(textStatus);
    console.log(errorThrown);}     
});
});

将版本和日期放在现有的 XHTML 文件中,其中一部分是:

 <p style="margin: 2em;" class="noind">Versie: <span id="versie">1.0.497</span>
 <br />Datum: <span id="datum">2014-06-05T22:15:50Z</span>

但是:我得到了空白。版本和日期被空白覆盖。 这怎么可能?

是的,我找到了。但是像这样:

$(document).ready(function(){
   $.get ('package.opf', function(xml) {
      $("span#datum").html($(xml).find("meta[property='dcterms\\:modified']").text());
      $("span#versie").html($(xml).find("meta[property='ibooks\\:version']").text());
    });
 });

.opf 文件与包含 javascript 的 xhtml 文件位于同一目录中。 但我认为这不适用于 iBooks 中的 EPUB3 图书,因为我看不出有任何变化。

【问题讨论】:

    标签: javascript jquery xml xhtml


    【解决方案1】:

    这是 jQ 对名称中带有冒号的 XML 节点和属性的处理;你需要像这样逃避它们:

    $("span#datum").html($(opf).find("meta[property='dcterms\\:modified']").text());
    $("span#versie").html($(opf).find("meta[property='ibooks\\:version']").text());
    

    编辑

    更新添加jsFiddle:http://jsfiddle.net/7cu7g/

    【讨论】:

    • 带双反斜杠?然后我在 Firebug 中看到“dcterms\:modified”。所以我做了一个反斜杠。然而,一两个,我仍然得到空白。
    • 是的,双反斜杠:*.com/questions/853740/…。我经常使用 jQ 来解析命名空间的 XML(感谢 SharePoint!),所以我现在已经习惯了,虽然一开始对我来说也不是很明显。
    • 仍然只有空白...grrrrr。也许它与命名空间有关?
    • 对不起,我的意思是 .length 而不是 .text() - 长度值会告诉你 jQ 根据指定的选择器找到了多少匹配对象。
    • @Erik - 我创建了一个快速的 jsFiddle 来演示这个工作;查看编辑后的答案。