的Xml使用JavaScript遍历
问题描述:
<links>
<osname name="windows xp" links="xyz" />
<osname name="windows 2k" links="xyz" />
</links>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 2k" />
<os name="windows 2003" />
<os name="windows 7" />
</owners>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 95" />
<os name="windows 98" />
<os name="windows vista" />
</owners>
的Javascript的Xml使用JavaScript遍历
它应该从链接 - > OSNAME的联系,并与owners-> OS =>名称
和OS名进行匹配是假设一次只,以后不应该重复。
在此先感谢
答
假设上面是店可变TXT:
if (window.DOMParser) {
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
} else {
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);
}
然后访问你的JavaScript提供的XML:
// links.osname[0].attribute(name)
xmlDoc.childNodes[0].childNodes[0].getAttribute('name');
// outputs: windows xp
// owners.os[2].attribute(name)
xmlDoc.childNodes[1].childNodes[2].getAttribute('name');
// outputs: windows 2003
有相当多的密码解释所有这些网络(另见:getNamedItem
,getElementsByTagName
,nodeValue
...以及更多)
要遍历:
for(i=0;i<xmlDoc.childeNodes[1].childNodes.length;i++) {
//Access each node in the set:
xmlDoc.childNodes[1].childNodes[i]
}
答
这个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:key name="kOwnersByName" match="owners" use="@name"/>
<xsl:key name="kOsByOwnerAndName" match="os"
use="concat(../@name,'+++',@name)"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="owners"/>
<xsl:template match="owners[count(.|key('kOwnersByName',@name)[1])=1]">
<xsl:variable name="vOwner" select="@name"/>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each select="../links/osname/@name">
<xsl:apply-templates
select="key('kOsByOwnerAndName',concat($vOwner,'+++',.))[1]"/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
通过适当的输入:
<root>
<links>
<osname name="windows xp" links="xyz" />
<osname name="windows 2k" links="xyz" />
</links>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 2k" />
<os name="windows 2003" />
<os name="windows 7" />
</owners>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 95" />
<os name="windows 98" />
<os name="windows vista" />
</owners>
</root>
输出什么,我认为是你想要什么:
<root>
<links>
<osname name="windows xp" links="xyz"></osname>
<osname name="windows 2k" links="xyz"></osname>
</links>
<owners name="microsoft">
<os name="windows xp"></os>
<os name="windows 2k"></os>
</owners>
</root>
答
使用xml更方便的工作方式是使用jQuery。
只是检索数据:
$.ajax({ url: '/Document.xml', success: ProcessData, contentType: 'text/xml' });
,做任何你想要的:
function ProcessData(data) {
var xml = $(data);
xml.find("links osname[name]").each(function() {
var value = $(this).attr("links"));
// etc.
});
}
如果你知道jQuery的,它应该是为你轻松的任务。
请提供XSLT转换所需的XML输出。 让人们猜测不太可能提供您需要的解决方案。 – 2010-09-02 02:50:17