我目前正在清理我的个人博客,我正在努力使 HTML 正确遵守 HTML 标准。博客结构很简单。我有一个链接到博客文章的主页和每个博客文章的页面。
对于博客文章页面。我不确定是否应该使用<main>or<article>标签来包装所有内容。
我要么用
<html>
<body>
{ heading, navigation, etc. }
<main>
<h1>{title}</h1>
<time datetime="{publish date}">{human readable publish date}</time>
{content}
</main>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
或者
<html>
<body>
{ heading, navigation, etc. }
<article>
<h1>{title}</h1>
<time datetime="{publish date}">{human readable publish date}</time>
{content}
</article>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果我读的HTML规范的<article>正确使用<main>似乎是更好的选择,因为<article>是为了分离HTML文档的独立自足的部分,而<main>意在表示在文档的文档或肉的主要部分。
我犹豫的原因是因为<article>与<time>元素一起使用以允许我指定帖子的发布时间。
来自 MDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article):
元素的发布日期和时间可以使用元素的 datetime 属性来描述。请注意, 的 pubdate 属性不再是 W3C HTML 5 标准的一部分。
我有一个我需要解析的XML文件。我无法控制文件的格式,无法更改它。
该文件使用前缀(称为a),但未在任何地方为该前缀定义名称空间。我似乎无法xpath用来查询具有a名称空间的节点。
这是xml文档的内容
<?xml version="1.0" encoding="UTF-8"?>
<a:root>
<a:thing>stuff0</a:thing>
<a:thing>stuff1</a:thing>
<a:thing>stuff2</a:thing>
<a:thing>stuff3</a:thing>
<a:thing>stuff4</a:thing>
<a:thing>stuff5</a:thing>
<a:thing>stuff6</a:thing>
<a:thing>stuff7</a:thing>
<a:thing>stuff8</a:thing>
<a:thing>stuff9</a:thing>
</a:root>
Run Code Online (Sandbox Code Playgroud)
我正在使用Nokogiri查询文档:
doc = Nokogiri::XML(open('text.xml'))
things = doc.xpath('//a:thing')
Run Code Online (Sandbox Code Playgroud)
失败,出现以下错误:
Nokogiri::XML::XPath::SyntaxError: Undefined namespace prefix: //a:thing
Run Code Online (Sandbox Code Playgroud)
从我的研究中,我发现可以在xpath方法中为前缀指定名称空间:
things = doc.xpath('//a:thing', a: 'nobody knows')
Run Code Online (Sandbox Code Playgroud)
这将返回一个空数组。
对我来说,获得所需节点的最佳方法是什么?
我有一个EVENT类型的HLS播放列表.它有#EXT-X-PLAYLIST-TYPE:EVENT标签.播放列表尚未完成.它没有#EXT-X-ENDLIST标签.
当我在Quicktime中播放播放列表时,它不允许我四处寻找.由于这是一个事件播放列表,因此所有以前的段都可用.Quicktime应该拥有回头所需的一切.
我在OS X 10.6和Maverick上试过这个问题并且出现问题.我也在运行iOS 5的旧iPad上试过这个.在iOS 5上,问题不会发生.
这是播放列表本身:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-START:TIME-OFFSET=0,PRECISE=NO
#EXT-X-TARGETDURATION:10
#EXTINF:10,
live_robocop_hd-rate_01_6512.ts
#EXTINF:10,
live_robocop_hd-rate_01_6513.ts
#EXTINF:10,
live_robocop_hd-rate_01_6514.ts
#EXTINF:10,
live_robocop_hd-rate_01_6515.ts
# ... more segments here ...
Run Code Online (Sandbox Code Playgroud) 在Elixir中,Map通过其值过滤a是一种有效的方法.
现在我有以下解决方案
%{foo: "bar", biz: nil, baz: 4}
|> Enum.reject(fn {_, v} -> is_nil(v) end)
|> Map.new
Run Code Online (Sandbox Code Playgroud)
这个解决方案对我来说似乎效率很低.当调用a时Map,Enum.reject/2返回a Keywords.因为我想要一个Map,我需要打电话Map.new/1将它转换Keywords回给我.
这似乎是低效的,因为Enum.reject/2必须迭代Map一次然后可能Map.new/1必须迭代Keywords另一次.
什么是更有效的解决方案?