我正在通过基于 Javascript 构建的 SpineTix 读取 XML 文件。我为此创建了一个自定义解析器。
这是XML结构
<ArlandaExpress>
<info>
<updated date="2013-06-10" time="10:28:42"/>
<message priority="1">
<![CDATA[
Biljettköp ombord kostar 100:- extra, ticket on board 100 SEK extra
]]>
</message>
<message priority="2">
<![CDATA[
Biljettköp ombord kostar 100:- extra, ticket on board 100 SEK extra
]]>
</message>
<message priority="3">
<![CDATA[
Restid 20 min. 2 för 380 kr tor-sön och röda dagar t.o.m.16/6// Traveltime 20 min. 2 for 380 SEK Thu-Sun and bank holidays until 16/6
]]>
</message>
</info>
<StockholmC>
<next minutes="6"/>
<upcoming datetime="2013-06-10 10:50"/>
<upcoming datetime="2013-06-10 11:05"/>
<upcoming datetime="2013-06-10 11:20"/>
</StockholmC>
</ArlandaExpress>
我需要获取 StockholmC 标记中的分钟和日期时间属性。我怎样才能做到这一点?到目前为止,这是我的代码,顺便说一句,如果您从文档中删除除 StockholmC 之外的所有其他标签,它就可以工作
function custom_parser( response, records ){
var rssDocument = parseXML( response );
if ( rssDocument==null ) return;
for ( var row=rssDocument.documentElement.firstElementChild; row!=null; row=row.nextElementSibling ) {
var r = new Object();
r.next = row.getAttribute('minutes');
r.date = row.getAttribute('datetime');
records.push( r );
}
}
我想指出,上面的代码在只有 StockholmC 标签的 XML 文件中有效。
谢谢
最佳答案
您正在遍历根的每个子节点,从 <info>
开始(rssDocument.documentElement.firstElementChild
)。这些元素没有 minutes
或 datetime
属性。
如果您只想遍历 <StockholmC>
的子项,您必须获得对它的引用而不是 documentElement
:
function custom_parser( response, records ){
var rssDocument = parseXML( response );
if (!rssDocument) return;
var stockholmc = rssDocument.getElementsByTagName('StockholmC')[0];
if (!stockholmc) return;
for (var row=stockholmc.firstElementChild; row!=null; row = row.nextElementSibling) {
// ...
}
}
DOM 接口(interface)提供了很多遍历DOM 树的方法。看看 introduction to DOM on MDN .
关于javascript - 使用 Javascript 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019808/